一、Netty应用场景
讲了一些Netty的组件,来聊一聊大家最关心的事情吧,他能够做什么?毕竟,我们学习就是拿来用的嘛。我可以简单的概括一下,凡是牵扯到网络相关的,都可以使用Neety去实现!
构建高性能、低时延的各种 Java 中间件,例如 MQ、分布式服务框架、ESB 消息总线等,Netty 主要作为基础通信框架提供高性能、低时延的通信服务;
公有或者私有协议栈的基础通信框架,例如可以基于 Netty 构建异步、高性能的 WebSocket 协议栈;
各领域应用,例如大数据、游戏等,Netty 作为高性能的通信框架用于内部各模块的数据分发、传输和汇总等,实现模块之间高性能通信。
View Details一、简介
二、并发编程的3个基本概念
1.原子性
2.可见性
3.有序性
三、锁的互斥和可见性
四、Java的内存模型JMM以及共享变量的可见性
五、volatile变量的特性
1.保证可见性,不保证原子性
2.禁止指令重排
六、volatile不适用的场景
七、volatile原理
八、单例模式的双重锁为什么要加volatile
1)找到项目下的.idea/workspace.xml
2)打开文件,找到标签:PropertiesComponent
3)添加一行属性:
其它属性代码不要修改,只添加下面一行属性代码
用的Apache PDFBox库 读:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.io.File; import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; public class PDFReader { public static void main(String[] args) { try { // 加载PDF文件 File file = new File("example.pdf"); PDDocument document = PDDocument.load(file); // 创建PDFTextStripper对象 PDFTextStripper pdfStripper = new PDFTextStripper(); // 从第一页到最后一页提取文本内容 for (int i = 1; i <= document.getNumberOfPages(); i++) { pdfStripper.setStartPage(i); pdfStripper.setEndPage(i); String text = pdfStripper.getText(document); System.out.println("Page " + i + ":"); System.out.println(text); } // 关闭PDF文档 document.close(); } catch (IOException e) { e.printStackTrace(); } } } |
写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDType1Font; public class PDFGenerator { public static void main(String[] args) { try { // 创建文档对象 PDDocument document = new PDDocument(); // 创建页面 PDPage page = new PDPage(); // 将页面添加到文档 document.addPage(page); // 创建内容流以便向页面添加内容 PDPageContentStream contentStream = new PDPageContentStream(document, page); // 设置字体和字体大小 contentStream.setFont(PDType1Font.HELVETICA, 12); // 在页面上写入文本 contentStream.beginText(); contentStream.newLineAtOffset(100, 700); contentStream.showText("Hello, World!"); contentStream.endText(); // 关闭内容流 contentStream.close(); // 保存文档 document.save("GeneratedPDF.pdf"); // 关闭文档 document.close(); System.out.println("PDF文件已生成成功!"); } catch (IOException e) { e.printStackTrace(); } } } |
View Details
页面跳转添加参数
1 2 3 |
wx.navigateTo({ url: `../deeddetail/deeddetail?id=${e.currentTarget.dataset.id}`, }) |
接收options 1. 在onLoad里接收参数
1 2 3 |
onLoad: function (options) { console.log(options.id) //options.参数名就可以取到 } |
2.其他位置获取参数及url可以写成工具函数放到utils中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/*获取当前页url*/ const getCurrentPageUrl=()=>{ let pages = getCurrentPages() //获取加载的页面 let currentPage = pages[pages.length-1] //获取当前页面的对象 let url = currentPage.route //当前页面url return url } /*获取当前页参数*/ const getCurrentPageParam=()=>{ let pages = getCurrentPages() //获取加载的页面 let currentPage = pages[pages.length-1] //获取当前页面的对象 let options = currentPage.options //如果要获取url中所带的参数可以查看options return options } module.exports = { getCurrentPageUrl, getCurrentPageParam } |
3.使用
1 2 3 4 |
import utils from '../../../utils/util' let url=utils.getCurrentPageUrl() let options=utils.getCurrentPageParam() |
from:https://blog.csdn.net/m0_55969466/article/details/122167424
View Details记录一下今天工作的时候升级一个认证服务遇到的小问题,虽然最后解决只有一行代码,却花了差不多3个小时。
初始版本为
springboot 1.5.9.RELEASE
springcloud Dalston.SR1
升级为
springboot 2.0.3.RELEASE
springcloude finchley.RELEASE
升级改造完成之后,服务运行正常,但是请求认证的时候报错:
http://localhost:9000/oauth/token?grant_type=password&scope=app&client_id=client_2&client_secret=123456&username=user&password=123456
回复
{
“error”: “invalid_client”,
“error_description”: “Bad client credentials”
}
客户端通过客户端的id和secret申请授权,这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌。
View Details首先我们得了解什么是Oauth2.0,简单来说Oauth2.0它是一个授权协议。我们可能会听说过,使用Oauth2.0来实现单点登录SSO,以及第三方登录。那个什么是授权?
举个通俗易懂的例子,就是第三方人员A要想进入B公司的大厦进行业务交流的时候,因为A并不是B公司的员工,出于安全的缘故,所以他不能够自由的出入B公司的大厦。那个A到了B公司前台的时候,A得去前台和B公司前台工作人员说明来意,并且出示邀请(访问)证明,此时B公司前台工作人员就会给你一张临时工牌让你进入大厦。
在这个例子当中,A没有工牌所以是无法进入B公司大厦里进行业务交流,B公司前台给A一张临时工牌,这个操作就相当于授权。
总的来说,OAuth 2.0 这种授权协议,就是保证第三方(软件)只有在获得授权之后,才可以进一步访问授权者的数据。
View DetailsOAuth 是一个开放的授权标准,允许客户端代表一个资源所有者获得对受保护服务器资源的访问权限。资源所有者可以是另一个客户端或最终用户。OAuth 还可以帮助最终用户将对其服务器资源的访问权限授权给第三方,而不必共享其凭据,比如用户名和密码。本系列文章遵从 RFC6749 中列出的 OAuth 2.0 授权框架。可以在 Internet Engineering Task Force 的网站上找到 RFC 6749 中列出的完整 OAuth 2.0 授权框架(请参阅 )。
View Details