
java
文章平均质量分 52
Zxy_true
低调的抗压的伙夫兄弟
展开
-
动态编译,自定义类加载器加载成功Demo
/1. 获取 `JavaCompiler` 实例 JavaCompiler compiler = ToolProvider . getSystemJavaCompiler();//信息收集器 DiagnosticCollector < JavaFileObject > collector = new DiagnosticCollector < >();原创 2023-07-13 11:52:16 · 260 阅读 · 0 评论 -
动态编译(基于内存)DEMO
给出基于内存的java动态编译demo代码原创 2023-07-11 16:55:19 · 314 阅读 · 2 评论 -
查看broker节点信息
kafka查看broker节点信息可以进入zookeeper客户端中查看:运行zkCli.sh进入客户端。输入ls 可以看到相关的节点。 输入 ls /broker/ids 可以看到broker数原创 2021-12-15 16:04:09 · 3831 阅读 · 1 评论 -
jps命令不能使用
yum install -y java-1.8.0-openjdk-devel 即可原创 2021-12-14 21:33:49 · 2515 阅读 · 0 评论 -
zookeeper集群启动失败
尝试:1、 防火墙没有打开对应端口:2181/3888/2888等2、云服务器安全组没有配置相应的端口:2888、38883、zoo.cfg配置文件添加:quorumListenOnAllIPs=true4、查看server.n 和/data/mid文件里的是否一致5、把本机的server.n = ip:2888:3888中的ip改成0.0.0.0...原创 2021-12-14 21:15:06 · 3036 阅读 · 0 评论 -
Linux常用指令
source /etc/profile 使配置文件生效echo $ZOOKEEPER_HOME 输出配置的环境变量netstat -ano | grep 2181 查看2181端口的进程原创 2021-12-14 19:48:06 · 826 阅读 · 0 评论 -
启动zookeeper时发现没有成功
使用zkServer.sh start 启动后显示启动成果,但是通过zkServer.sh status发现服务器未启动。通过网上查找经验发现是8080端口被占用导致的,修改zookeeper的zoo.cfg配置文件修改端口即可:admin.serverPort=8081原创 2021-12-14 15:52:39 · 1090 阅读 · 0 评论 -
日志中的日志级别
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。ALL 最低等级的,用于打开所有日志记录。TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行转载 2021-09-21 11:12:19 · 596 阅读 · 0 评论 -
Synchronized原理
跳转链接原创 2021-11-30 14:52:33 · 132 阅读 · 0 评论 -
ThreadLocal原理
地址跳转原创 2021-11-29 21:01:30 · 132 阅读 · 0 评论 -
ThreadPoolExecutor 参数详解
跳转链接原创 2021-11-29 19:37:59 · 248 阅读 · 0 评论 -
Thread通过run()方法和start()方法启动的差别
结论Thread.run方法会直接调用传入的Runnable对象的run方法,也就是说此时的Thread相当于一个静态代理,从而并没有通过创建一个线程的方式去执行run方法,方法的执行还是在原来的线程。通过Thread.start()方法去执行时,会调用本地方法start0()去创建一个线程,此时采用动态代理的方式去调用传入的Runnable的run方法,即通过创建一个线程的方式去执行任务。源码Thread的run方法: /** * If this thread was cons原创 2021-11-24 11:38:26 · 232 阅读 · 0 评论 -
AQS的实现分析
一、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch…。二、框架它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里vol转载 2021-11-23 18:12:02 · 173 阅读 · 0 评论 -
SynchronousQueue
今天看了无锁且没有容量没有队列的这个变态的锁:SynchronousQueue。他的特性就是没有容器,也没有锁:存数据线程在到达队列时,若发现没有取数据的线程,就在那里一直等待,一直等待有取数据的线程过来唤醒,取走数据,才会释放。反之亦然。整个实现都是通过CAS实现。他的源码真的是非常的不好阅读,主要本人涉及到栈、链表的结构的操作不是很熟悉,对照着其他大牛的分析,一步步走Debug来研读,大致摸清了思路。下面来分析一下源码SynchronousQueue的创建先来看下构造器// 默认创建非公转载 2021-11-22 20:08:40 · 168 阅读 · 0 评论 -
System.currentTimeMillis()和System.nanoTime()区别
查看该函数的API,可以知道这个时间的单位是毫秒(相当于当时的时间戳,可以转换成对应的日期的)。而有些程序的执行时间很短,用这个函数计算时间的误差会很大。如就上面这段程序而言,循环次数为100000(10万)时,用时1毫秒,为10000(1万)时,用时0毫秒,更小的肯定也是0。对这类程序而言,这个精确度还远远不够!API说明:long java.lang.System.currentTimeMillis()Returns the current time in milliseconds. Note原创 2021-11-18 16:06:04 · 195 阅读 · 0 评论 -
@Valid和@Validated的区别于联系
@Valid作用:用于验证注解是否符合要求,直接加在变量user之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。用法:public Object valid(@Valid Person person, BindingResult bindingResult) { if (bindingResult.hasErrors()) { //获取错误信息 FieldError fieldError = bindingResult.get转载 2021-09-22 14:08:07 · 165 阅读 · 0 评论 -
@RequiredArgsConstructor(onConstructor = @__(@Autowired)) Intellij IDEA如何去掉@Autowired 注入警告的方法
在Service层注入Mybatis的Mapper我们通常会使用@Autowired 自动注入@Autowiredprivate ProductMapper productMapper;但是这样Intellij IDEA会显示红色告警,提示不能自动注入。当我们在Controller层注入Service时我们也经常直接在Filed上使用@Autowired 注解,这时候不显示红色警告,但是也显示Field injection is not recommended 的建议原因第一种情况是因为转载 2021-11-10 14:42:13 · 926 阅读 · 0 评论 -
在docker中运行带有mysql的springboot程序
先将SpringBoot项目打包成jar包。即利用maven打包插件,点击package打包后左侧project中的target目录下会生成项目jar包。将项目中的配置文件中的SQL地址从 localhost 改成你服务器对应的公网ip接着是编写Dockerfile文件(在project中新建文件即可)FROM java:8 //基础包ADD {你的jar包名}.jar /xxx.jar //解压文件jar包为xxx.jarEXPOSE 8080 //对外暴露端口号 ENTRYPO.原创 2021-09-16 14:15:53 · 180 阅读 · 0 评论 -
代理模式,静态代理与动态代理区别、各自实现,以及动态代理的源码分析
一、什么是代理代理就是我们指定一个工具类,这个类作为服务申明(一个接口)和服务具体实现(继承这个接口并实现方法)的第三者,它也实现这个服务接口,同时需要把这个服务具体实现放入其中,但是实现该服务的方法时,通过调用这个服务具体实现的方法,同时在该方法前后提供额外的增强服务来提高服务的力度,从而实现方法的增强。二、静态代理概念:所谓静态代理就是上述的代理的实现由我们自己手动实现,在新增服务的时候需要在这个代理中心手动增加代理服务的实现者并在后面实例化代理调用它,下面是一个例子:需求:现在需要两个服务原创 2021-09-23 13:27:10 · 295 阅读 · 0 评论 -
Lambda表达式的相关知识(概念、简化和用法)
概念lambda表达式是java8的新特性之一,本质上来说是一个匿名函数,可以简化接口的实现从而简化代码。使用限定:只有函数式接口才能使用lambda表达式简化实现。函数式接口:接口中只有一个需要实现的方法的接口就是函数式接口(不包括default修饰的默认的方法,static修饰的静态方法,以及从object继承的toString等方法。)可以使用@FunctionalInterface注解检验是否是函数式接口在写lambda表达式的时候只用关注参数列表和方法体:(参数)->{方法体原创 2021-09-22 19:44:39 · 385 阅读 · 0 评论 -
JVM的堆和非堆即调整
堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在Java虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heapmemory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方转载 2021-11-12 14:59:36 · 283 阅读 · 0 评论 -
Server-Sent Events 教程
服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE)。本文介绍它的用法。一、SSE 的本质严格地说,HTTP 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming)。也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一转载 2021-11-11 15:01:55 · 641 阅读 · 0 评论 -
WebSocket
https://www.ruanyifeng.com/blog/2017/05/websocket.html原创 2021-11-11 14:48:54 · 1642 阅读 · 0 评论 -
CORS解决跨域问题
跨域问题什么是跨域跨域是指跨域名的访问,以下情况都属于跨域:跨域原因说明示例域名不同www.jd.com 与 www.taobao.com域名相同,端口不同www.jd.com:8080 与 www.jd.com:8081二级域名不同item.jd.com 与 miaosha.jd.com如果域名和端口都相同,但是请求路径不同,不属于跨域,如:www.jd.com/itemwww.jd.com/goods为什么有跨域问题?跨域不一定会有跨域问题。转载 2021-11-11 14:17:44 · 4440 阅读 · 0 评论 -
HTTP响应头处理。网页嵌套问题、http缓存设置
HTTP响应头处理HTTP响应头中的许多属性都可以用来提高Web安全。我们来看一下Spring Security中提供显示支持的一些HTTP响应头Spring Security默认情况下 显式支持的HTTP相应头主要有以下几种:Cache-Control: no-cache, no-store, max-age=0, must-revalidatePragma: no-cacheExpires: 0X-Content-Type-Options: nosniffStrict-Transport-转载 2021-11-10 14:27:55 · 1137 阅读 · 0 评论 -
JWT中Token的生成
1、什么是Cookie?cookie指的就是浏览器里面能永久存储数据的一种数据存储功能。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。Cookie有什么功能特点呢?在同一个页面中设置 Cookie,实际上是按从后往前的顺序进行的。如果要先删除一个转载 2021-11-10 13:56:18 · 808 阅读 · 0 评论 -
转发一个security的案例
添加链接描述转载 2021-11-10 11:31:27 · 81 阅读 · 0 评论 -
cookie、session、token区别与联系
sessionsession的中文翻译是“会话”,当用户打开某个web应用时,便与web服务器产生一次session。服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。cookiecookie是保存在本地终端的数据。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存转载 2021-11-10 10:04:43 · 741 阅读 · 0 评论 -
HashMap、HashSet源码分析
HashSet源码分析1、基本结论1.1、底层实现1.2、基本机制2、源码分析2.1、插入元素2.2 resize()源码分析1、基本结论1.1、底层实现HashSet是由HashMap实现的,而HashMap是一个个键值对的集合,因此HashSet中的值作为HashMap的key,而自动new一个Object对象最为HashMap的value,这个Object的引用是静态常量的引用类型,所以整个内存仅存在一个Object,意味着所有的Set对应于HashMap中的value都是这个Object。因此原创 2021-11-08 21:58:13 · 441 阅读 · 0 评论 -
volatile关键字的作用
https://www.cnblogs.com/daxin/p/3364014.html转载 2021-11-04 22:03:38 · 113 阅读 · 0 评论 -
Math类的取整方法
Math类中提供了三个与取整有关的方法:ceil,floor,round,这些方法的作用于它们的英文名称的含义相对应,例如:ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.6)的结果为-11;floor的英文是地板,该方法就表示向下取整,Math.floor(11.6)的结果是11,Math.floor(-11.4)的结果-12;最难掌握的是round方法,他表示“四舍五入”,算法为Math.floor(x+0.5),即将原来原创 2021-10-12 15:55:55 · 756 阅读 · 0 评论 -
ArrayList 扩容源码分析
ArrayList1、ArratList无参构造器形式初始容量是0,加入第一个数据时容量设置为10,随后每次到达容量都会按当前容量的1.5倍扩容。2、arraylist指定容量的构造方式创建则初始容量是指定的容量,而后面每次到达容量上限都会按1.5倍扩容。源码:在ArrayList中,使用一个Object类型的数组实现对元素进行保存。首先编写测试代码: List<Integer> list = new ArrayList<>(); for (int i原创 2021-09-30 20:50:38 · 181 阅读 · 0 评论 -
Java中string字符串方法
一、字符串的申明方法:1.String 申明对象=“字符串”;2.String 申明对象=new String();3.String 申明对象=new String(“字符串");二、string字符串的不变性:String s1=“zxy”;String s2=“zxy”;String s3=new String(“zxy”);String s4=new String(“zxy...原创 2019-09-11 15:50:56 · 175 阅读 · 0 评论 -
java面向对象多态浅浅总结
面向对象四大特征:继承、封装、抽象、多态多态:一种办法拥有多种实现形式,具体的实现方式与具体对象有关,类的继承中的重载、覆盖便是多态的体现。多态的必要条件:继承、重写、父类引用指向子类对象重载:同名而功能不同的方法在子类继承的定义条件:1 同名方法有无参数的区别2 参数的个数不同3 参数的类型不同注:同名同参的方法返回值不同时编译不能通过覆盖(重写):同名同参返回值相同的方法在子类中...原创 2019-09-01 23:34:27 · 195 阅读 · 0 评论 -
Static修饰符心得
—static 修饰的域与类一样同在堆空间中—专属于类,不属于任何一个对象,又为各个对象共享使用—生命周期:与程序相同—static 修饰的方法内只能引用static属性或方法,不能引用非static属性或方法,其他方法却可以访问static修饰的—可被外部更改—引用:可不用申明对象直接引用,方法:类名.方法或属性、对象名.方法或属性—与final修饰符区别:1 final修饰的属性为...原创 2019-08-30 21:37:23 · 130 阅读 · 0 评论