JUC 并发编程指南
JUC: 泛指java.util.concurrent包中并发编程下使用的工具类。多线程编程的固定套路: 线程操作资源类
引言Java线程有几种状态,分别是什么?6种New,Runnable,Blocked,Waiting, Timed-Wating,Terminated
wait/sleep的区别?sleep - 谁调用谁睡觉😴使用sleep()来控制一个线程的执行时间,使用wait()来进行多线程同步。
wait
sleep
所属类不同
Object
Thread
是否释放锁
线程休眠并且释放掉对象机锁
线程休眠并且不释放对象机锁
使用范围不同
同步方法/同步代码块
任何地方
推荐:https://www.jianshu.com/p/41d4a7728fc4
Callable与Runnable区别:
Callable
Runnable
是否有返回值
有
无
是否抛出异常
有
无
方法不同
call()
run()
123456FutureTask task = new FutureTask<Strin ...
SpringBoot是如何实现自动配置功能的?
SpringBoot是如何实现自动配置功能的?所谓自动配置,就是通过预先定义了很多个配置类(带@Configuration注解的类),并将这些类装载到Spring容器中去。具体实现在AutoConfigurationImportSelector类中。
怎样开启自动配置功能?SpringBoot项目启动类
12345678@SpringBootApplication //声明SpringBoot启动类public class SpringSoucreCodeApplication { public static void main(String[] args) { SpringApplication.run(SpringSoucreCodeApplication.class, args); }}
@SpringBootApplication
123456789101112131415161718@Target({ElementType.TYPE})@Retention(RetentionPolic ...
Java HashMap 内部原理
概述
脑图:https://www.processon.com/diagraming/5bd57d49e4b021eeb31f7e06
版本不同首先jdk1.7和jdk1.8内部实现有不同;先给结论,镇楼:
对比
内部结构
计算新下标
扩容机制
jdk1.7
数组 + 链表
通过hash&newCap-1计算出新下标,依次进行数据迁移
先进行扩容再插入,执行的是头插法;会出现逆序和环形链表死循环问题;
jdk1.8
数据 + 链表 + 红黑树
通过hash&oldCap遍历元素检查高一位big值(0-下标不变,1-下标改变),组装成新的链表,统一进行数据迁移
先进行插入再进行扩容,执行的是尾插法,直接插到链表尾部/红黑数树,不会出现逆序和环形链表死循环问题
注:扩容操作时,一个元素的新坐标,结果只有两种: 要么在原来的位置,要么在 (原来的位置+原数组大小)的位置。
为什么要改动?遇到的问题:由于JDK中采用链地址法解决 哈希冲突,当冲突越来越多,导致链表越来越长,导致性能下降 。同时jdk1.7采用插法,存在死锁问题。
解法:当链表达到 ...
Maven 实战指南
《maven 实战》记得是从二手网店淘到的,已经买了有小半年,还只看了个目录; 打算用个端午的一天时间给它啃下来。。
maven 规范默认情况下:
项目主代码位于 src/main/java 目录下,,编译后在 target/classes 下
项目测试代码位于 src/test/java ,编译后在 target/test-class 下。
Maven 构建的所有输入都在 target/目录下。
自动访问 Maven 的中央仓库, http://repol.maven.org/maven2
默认打包类型 jar, 主代码打包根据 artifact-version.jar 规则命名打包输出到 target/目录下。
在项目根目录下放置 pom.xml
注: 如 pom.xml 中的 scope(依赖的范围),默认值是 compile; 如果你看到指定为 test,即:该依赖只对测试代码有效,若在主代码中使用,会造成编译错误。
mvn clean compile背后的执行过程:
先执行 clean: ...
JVM内部机制
引言
本文是以jdk1.8的hotspot虚拟机为范例,介绍JVM的内部机制的。
JVM主要由三个主要的子系统构成
类加载机制
运行时数据区(内存结构)
执行引擎
连接
验证:验证字节码文件的正确性。准备: 给类的静态变量分配内容,并赋予默认值(jvm默认的初始值)。解析:类装载器装入类所引用的其他所有类,即完成静态链接操作,将符号引用变为直接引用。初始化:为类的静态变量赋予初始值(程序中的变量真正的初始值),执行静态代码块。注:
静态链接:解析阶段,将符号引用转化为直接引用。
动态链接:程序运行期间,将符号引用转化为直接引用。
类加载机制全盘责任委托机制当一个classloader加载一个Class的时候,这个Class所依赖的和引用的其它Class,通常也由这个classloader负责载入(显示指定类加载器除外)。
双亲委派机制先委托父类加载器寻找目标类,只有在父类找不到时才在自己的类路径中寻找。
目的:
沙箱安全机制:可以防止核心库被随意篡改。
避免重复加载:保证字节码文件只被加载一次。
为什么要通过显示指定类加载器,打破双亲委派模型?
一般是因为加载花费的时 ...
初识 Nginx
历史背景:为什么会出现?在互联网时代的背景下,Nginx相比其他软件更加适用于多核CUP架构。可以处理数百万,甚至上千万的并发连接。 牛B到无需解释,有木有??
适用的场景
静态资源服务
反向代理服务: 缓存加速(缓存某些动态资源)+负载均衡
API服务
优点
高并发、高性能 通常一个软件的rqs(每秒的请求数)越多,此时并发数就越少。eg: 给出一个标准, 在32核64G内存的机器,可以轻松达到数千万的并发连接。如果是处理简单静态请求,可以达到一百万的rqs。注:高并发:每个链接,所用的内存尽可能的少就可以达到。 但是即高并发又高性能需要很好的架构设计。
可扩展性: 模块化设计
高可靠性: 作为企业服务的边缘结点,稳定运行几年不成问题
热部署: 不需要重启Nginx,即可更新服务
BSD许可证: 开源、免费、可修改源代码并用于商用
四个组成部分
二级制可执行文件 【整个机车】
配置文件: nginx.conf 【操作机车的驾驶员】
访问日志 【记录机车运行轨迹的GPS】
错误日志 【用于定位错误事故的黑匣子】
一个请求的响应之路
我是一个请求,下面是我对往昔的追忆!
请求处理流程模拟场景:用户前端上传文件的操作
Https我被通过post方式经过Https协议发送的Server端; 下面我就要好好吐槽一下这个Https这个小伙伴了。Https本质上并不是协议,而是Http协议和SSL/TLS协议的“私生子”,在Http下加入SSL层,就成了它,简单讲它是HTTP的安全版。
Https在传输数据前需要进行一次握手,握手时采用非对称加密和Hash算法,握手后数据用对称加密传输。
握手过程如下:
非对称加密算法:- RSA,DSA/DSS
对称加密算法 :AES、RC4、3DES Hash算法 - MD5、SHA1、SHA256
参考博文:https://blog.csdn.net/hherima/article/details/52469674
DNSDNS(域名系统):一个映射域名和IP地址的分布式数据库。DNS协议运行在UDP协议上,使用端口53.DNS会有一些策略将静态的东西直接返回给浏览器分层式DNS域名服务器。
TCP连接
三次握手
四次挥手
...
为什么覆盖 equals() 一定要覆盖 hashCode()
概述为什么在重写equals的方法的时候,必须注意重写hashCode方法?为什么要保证通过equals判断相等的两个对象,调用hashCode方法要返回同样的整数值。 如果不能保证会有什么问题?请听下回分解-_-..
解:如果不这样做的话,就会违反 hashCode 的通用约定,(相等的对象必须拥有相同的 hashCode 散列值),从而导致该类无法同所有的给予散列的集合一起正常运作。这类集合包括 HashSet、HashMap。
详述举例说明问题:
123456789101112131415161718192021222324public class PhoneNumber { int numbersOne; int numbersTwo; int numbersThree; public PhoneNumber(int numbersOne, int numbersTwo, int numbersThree) { this.numbersOne = numbersOne; this.numbersTwo = ...
大学教会我什么?
大学是一叶舟,将你从学校的岸 摆渡到 社会的滩 - 序
避免你还未配好剑,出门就已经是江湖—————————————————————————————————————
寝室里回响着,某位同学放的音乐:怀念啊,我们的青春啊,在记忆里生根发芽。。。。(《怀念青春》)
生活中唯一不变的就是改变,时光—————————————————————————————————————
是一堆证书??
优秀XX真的优秀吗? 三好学生哪里好了?考试没挂,可你又真的学到了什么呢?你曾说过吗:课堂- 老师刚才讲啥了??考前- 笔记借我看看呗考时- 你说我这样弄,考试时监考老师应该看不见的吧考后- 不管了,我要去浪了
真相就是》》- 你想像猪一样生活,却没法像猪一样快乐
—————————————————————————————————————
是几款游戏??
部落冲突已平,阴阳师沉寂,球球大作战告一段落;然而你认为王者荣耀和绝地求生还能走多远……你曾说过吗:走,包宿去,靠,在来一局,你什么段位。。你怎么这么菜,,求带,求带,,完了,我手机快没电了22,好伤真相就是》》-游戏可能不好玩,只要不无聊就行
...