![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java学习
文章平均质量分 61
Java学习
涛子王
所有的程序思想都来源于生活,所以程序对于生活是比较简单的,不管多么简单的一个程序,程序员都喜欢起一个高大上的名称,所以学习代码不要先被名字吓跑,第一步先把名字的光环去掉,然后你会发现原来就是这玩意!!!
展开
-
JNI简单描述
JNI简单描述原创 2022-09-21 15:18:33 · 252 阅读 · 0 评论 -
用简单的方式去描述RPC原理
RPC原理原创 2022-09-15 14:57:05 · 727 阅读 · 0 评论 -
用简单的方式去描述jvm的设计思路及原理
加载器将代码转换完成后并不结束,而是接着执行转换后的代码,这样转换后的代码才能使用加载器封装过的方法(可以理解成加载器将转换后的代码热加载进来,变成自己的一部分,然后执行)。原来的转换器将class代码转换成平台代码是一步,然后手动执行转换完的代码是一步,这两步是独立的(是两个进程)。举个例子你就明白了,平时你启动多个java程序,你会发现进程名都是叫java,并不是main函数对应的那个类的名字,这就说明了,其实jvm才是真正启动的程序,我们开发的代码只是被热加载进去的待执行代码而已。原创 2022-09-14 16:19:03 · 176 阅读 · 0 评论 -
java调优和排查
java调优和排查原创 2022-09-14 15:55:07 · 118 阅读 · 0 评论 -
redis服务搭建
cd [程序目录]wget http://download.redis.io/releases/redis-5.0.7.tar.gztar -zxvf redis-5.0.7.tar.gzcd redis-5.0.7make./src/redis-server这种方式只能本地访问,外网访问需要如下操作cp redis.conf redis_net.conf将 redis_net.conf 文件里NETWORK模块下的:bind 127.0.0.1 改为 bind 0.原创 2021-12-30 14:02:32 · 414 阅读 · 0 评论 -
MAVEN配置多代码目录
我们在使用maven管理代码的时候maven的默认目录有,代码目录:src/main/java,资源目录:src/main/resources如果我们在开发过程中多人开发一个项目,为了开发好管理,我们会给每个业务建一个文件夹例如:src/main/order,src/main/log,src/main/login这时候我们会发现maven只编译了src/main/java目录下的代码,其它没有编译,这是因为其它目录没有被指定为代码资源目录,所以需要配置,这个功能需要使用插件:build-he原创 2021-12-13 10:31:52 · 910 阅读 · 0 评论 -
Linux环境java使用jni调用本地方法
干活前先把流程理清楚,先把工作场景,分析步骤1.创建一个本地方法的java定义2.将java定义转化成c定义3.实现c定义4.将实现的c定义转化成链接库5.加载链接库,调用本地方法触发链接库的实现先查看本地方法的类,步骤1/** * 调用本地方法的组件 */public class NativeUtils { /*比大小*/ public native int max(int i, int y);}编译生成字节码文件:javacNativeUt.原创 2021-11-17 14:25:05 · 955 阅读 · 0 评论 -
Tomcat源码阅读流程
前面我们将tomcat的流程理了一遍,这里将流程和代码结合起来通读,下面的图就是代码的整体运行流程,阅读方式是先右后下,右代表调用方法,下代表同级顺序执行原创 2021-09-17 11:28:51 · 54 阅读 · 0 评论 -
Tomcat设计结构流程
前面把tomcat的源码运行起来后,然后把源码主流程通读了一遍,这里,我将流程列出来阅读方式是先右后下,右代表调用方法,下代表同级顺序执行原创 2021-09-16 15:27:08 · 121 阅读 · 0 评论 -
Idea启动Tomcat源码
参考:https://www.cnblogs.com/yangjiming/p/10953710.htmlhttps://blog.csdn.net/qq_33135813/article/details/88216149下载tomcat源码,地址:https://tomcat.apache.org/解压到目录在项目的根目录下添加pom.xml文件,内容如下:<?xml version="1.0" encoding="UTF-8...原创 2021-09-07 15:32:26 · 355 阅读 · 0 评论 -
AQS抽象队列同步器原理
aqs的原理很简单,就是1.当前执行信息,2.Node同步链当前执行信息包含:1.占用状态-state,大于0就说明锁被占用了2.当前线程-exclusiveOwnerThread,占用锁的线程,命名排除是因为重入的时候直接排除判断3.同步链首-head,执行中或者已执行完的Node(执行中的是插队的Node),执行中完成后用唤醒head后的Node4.同步链尾-tailfeioNode包含:1.前Node2.后Node3.后Node的等待的行为-waitStatusThread0请求原创 2021-08-24 18:31:04 · 88 阅读 · 0 评论 -
CHLLock的原理
我们今天来讲一下CHL锁的原理,CLH锁其实就是一种是基于逻辑队列非线程饥饿的一种自旋公平锁,由于是 Craig、Landin 和 Hagersten三位大佬的发明,因此命名为CLH锁。原理如下:1.首先有一个尾节点指针,通过这个尾结点指针来构建等待线程的逻辑队列,因此能确保线程线程先到先服务的公平性,因此尾指针可以说是构建逻辑队列的桥梁;此外这个尾节点指针是原子引用类型,避免了多线程并发操作的线程安全性问题;2.通过等待锁的每个线程在的某个变量上自旋等待,这个变量一般依赖前一个线程,数据也是由前原创 2021-08-19 14:02:24 · 161 阅读 · 0 评论 -
队列和锁的关系
我们在并发开发的时候,队列是一直在使用的,那我们今天就来讲讲队列我们分为两种:1.阻塞队列,2.非阻塞队列,那我们怎么去区分这两个队列呢我们还是举个例子:公司里面有A和B都要用会议室,然后他们两个都去申请使用,A先到了1分钟,所A就获取会议室的锁钥匙,然后B就只能等着A用好了才能使用了,那B怎么知道A什么时候用好呢?这时候留给A的方式有两种:1.询问型:在会议室边上等着,每隔几分钟看下A有没用好,好了立马使用2.休息型:在会议室边上的沙发上睡觉,A用好了怕怕肩膀说,我用好了,你可以使用,然后A调整原创 2021-08-14 09:51:00 · 673 阅读 · 0 评论 -
多线程开发
进程和线程的关系:一个进程就是一个程序,一个进程包含1个以上的线程,通俗的讲就是,进程是正常运作的工厂,线程生产线,一个工厂至少要有1条以上的生产线,这样才是一个正常运作的工厂。一个java程序默认有几条线程2条线程,一个是mian线程,一个是gc线程什么并发和并行并发:一个处理器交替执行多个任务并行:多个处理器一直同时运行线程的状态有6个,分别为:NEW:新建,RUNNABLE:运行,BLOCKED:阻塞,WAITING:永久等待,TIMED_WAITING:限时等待,TERMINATED原创 2021-08-08 12:23:07 · 88 阅读 · 0 评论 -
位运算在开发中的使用
我们今天讲一个a和b两个数值交换的位运算使用方式传统:上面这个是我们最常用的方式,需要使用一个中间临时变量,今天我们换一个方式位运算:^是异或运算,那这个的原理是什么呢?我们来分析一下先转二进制m: 0101n : 1010m = m ^ n;m : 1111n = m ^ n;n : 0101 (等于原来的m了)m = m ^ n;m : 1010转换成10进制:m=10,n=5;这个有个疑问,异或到底是什么呢?我们来举个例子假设...原创 2021-08-06 18:11:26 · 163 阅读 · 1 评论 -
Stream原理
还是老样子,不要流式处理这个高大上的名字给忽悠了,我们看两个例子,原创 2021-08-03 17:10:22 · 90 阅读 · 0 评论 -
Spliterator的原理
测试代码/*初始化数据*/String[] strings = {"A", "a", "B", "b", "C", "c" , "AB", "Ab", "aB", "ab", "BC", "Bc", "bC", "bc", "AC", "Ac", "aC", "ac" , "ABC", "ABc", "AcC", "aBC", "Abc", "aBc", "abC", "abc"};List<String> lists = Arrays.asList(str...原创 2021-08-02 16:37:04 · 202 阅读 · 0 评论 -
声明式事务的五个特性
1.事务传播机制 参考:https://blog.csdn.net/shanghaichongmin/article/details/1190058182.事务隔离机制3.只读 如果一个事务只对数据库执行读操作,那么该数据库就可能利用那个事务的只读特性,采取某些优化措施。通过把一个事务声明为只读,可以给后端数据库一个机会来应用那些它认为合适的优化措施。 由于只读的优化措施是在一个事务启动时由后端数据库实施的, 所以只有将会启动一个事务的方法声明只...原创 2021-07-23 15:52:06 · 230 阅读 · 0 评论 -
事务的传播机制
REQUIRED(默认) 如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务 SUPPORTS 当前存在事务,则加入当前事务,如果当前没有事务,就以非事务方法执行 MANDATORY 当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常 REQUIRES_NEW 创建一个新事务,如果存在当前事务,则挂起该事务 NOT_SUPPORTED 始终以非事务方式执行,如果当前存在事务,则挂起当前事务 ...原创 2021-07-22 18:06:25 · 378 阅读 · 0 评论 -
声明式事务失效原因
我们在开发中会发现一个问题,controller调用service中的一个普通方法,普通方法调用一个有事务注解的方法,结果发现事务失效了,service类如下:@Serviceclass TransactionalService { public void a() throws Exception {//标记1 b(); } @Transactional public void b() throws Exception {//标记2 }}.原创 2021-07-22 17:28:51 · 358 阅读 · 1 评论 -
静态代理、jdk动态代理、cglib动态代理
我们先用房东出租房子引出代理模式出租一套房子流程为:发布出租消息->带人看房->准备合同->签合同->收钱交钥匙如果租房出新规,需要提前备案,那就变成了以下的流程:备案->发布出租消息->带人看房->准备合同->签合同->收钱交钥匙每一次的变动房东都需要了解最新的规定,但是房东不想这么麻烦,那就把自己不内行的事给专业的中介做,需要签合同的时候过去下就好了,这样房东就不要关注出租的细节了,只要专注签合同就可以了,无论租房流程怎么变,和房东没关系了。原创 2021-06-30 16:47:59 · 78 阅读 · 0 评论 -
nacos安装
1.打开jdk下载页https://www.oracle.com/java/technologies/javase-downloads.html原创 2021-06-21 10:56:37 · 82 阅读 · 0 评论