一、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 Details