![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA基础
文章平均质量分 76
喜欢敲代码的Apollo
应届毕业生,蚂蚁金服JAVA后端工程师,欢迎小伙伴们一起交流!
展开
-
跨域问题的原因及解决对策
内容来自两篇非常好的文章https://zhuanlan.zhihu.com/p/145837536https://zhuanlan.zhihu.com/p/66484450跨域问题的由来相信很多人都或多或少了解过跨域问题,尤其在现如今前后端分离大行其道的时候。你在本地开发一个前端项目,这个项目是通过 node 运行的,端口是9528,而服务端是通过 spring boot 提供的,端口号是7001。当你调用一个服务端接口时,很可能得到类似下面这样的一个错误:然后你在发送请求的地方debug原创 2022-03-25 11:37:50 · 2969 阅读 · 0 评论 -
类实例与类的垃圾回收
前言近期在蚂蚁金服接触了SOFAArk,其中涉及到类的动态装配与卸载,对垃圾回收有了进一步的理解。类的生命周期https://blog.csdn.net/xorxos/article/details/80490240 当类被加载、连接和初始化后,它的生命周期就开始了。(注意这一步是类加载的过程)当代表类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,类在方法区内的数据也会被卸载,从而结束类的生命周期。 由此可见,一个类何时结束生命周期,取决于代表它的Class对象何时结原创 2021-08-15 19:18:12 · 967 阅读 · 3 评论 -
七种单例模式写法即介绍
参考文章https://blog.csdn.net/mnb65482/article/details/80458571https://blog.csdn.net/itachi85/article/details/50510124定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式结构图:首先我们要先了解下单例的四大原则:1.构造私有。2.以静态方法或者枚举返回实例。3.确保实例只有一个,尤其是多线程环境。4.确保反序列换时不会重新构建对象。我们常用的单例模式有:饿原创 2021-04-13 00:36:27 · 401 阅读 · 0 评论 -
字符串常量和字符串对象区别
前言String s1 = new String(“hello”);String s2 = “hello”;s1是字符串对象,s2和字符串常量,创建过程有何区别?内存分配字符串对象s1栈中定义一个引用变量s1,堆中开辟一个内存空间,将堆内存空间的引用赋值给s1,“hello”是常量,去字符串常量池查看是否有“hello”字符串对象,没有的话分配一个空间存放hello,并且将其空间地址存入堆中new出来的空间中。字符串常量s2栈中定义一个引用变量s2,编译程序先去字符串常量池检查,是否存在“h原创 2021-03-31 09:58:41 · 1412 阅读 · 2 评论 -
BIO/NIO/多路复用/Selector/select/poll/epoll
前言进行总结的初衷是没搞明白linux下的select/poll/epoll与java下nio的selector多路复用器的关系,于是对知识点进行了梳理。先上结论,selector多路复用器算是对linux下的select/poll/epoll进行封装,selector可以i有多种实现,linux系统下默认使用epoll的实现方式。BIO模型https://www.jianshu.com/p/138847d5cafdBIO即为阻塞IO的意思,通常我们讲BIO的时候都会和服务器模型配合着讲,在实际应原创 2021-03-27 19:27:40 · 1741 阅读 · 4 评论 -
MySQL的可重复读、幻读及实现原理
目录一、事务的隔离级别二、mysql怎么实现的可重复读举例说明MVCC的实现MVCC逻辑流程-插入MVCC逻辑流程-删除MVCC逻辑流程-修改MVCC逻辑流程-查询三、幻读快照读和当前读四、如何解决幻读事务隔离级别有四种,mysql默认使用的是可重复读,mysql是怎么实现可重复读的?为什么会出现幻读?是否解决了幻读的问题?一、事务的隔离级别Read Uncommitted(未提交读)在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据,也被称之为脏读(D原创 2021-02-08 23:30:53 · 5695 阅读 · 1 评论 -
PriorityQueue优先级队列用法
用法先说结论,JAVA中默认是小根堆,即小的在堆顶(poll时小的出去)接下来看下默认的最小堆写法PriorityQueue<Integer> queue = new PriorityQueue<Integer>(new Comparator<Integer>(){ @Override public int compare(Integer o1, Integer o2){ return o1 < o2 ? -1 : 1; // 最小优先队列,直接 re原创 2021-02-08 12:58:26 · 6305 阅读 · 0 评论 -
HashMap初始容量为什么是2的n次幂及扩容为什么是2倍的形式?
前言逛了一圈发现大家对于这个问题的回答写的都比较散乱,简而言之两点原因:1.为了保证得到的新的数组索引和老数组索引一致2.rehash时的取余操作,hash % length == hash & (length - 1)这个关系只有在length等于二的幂次方时成立,位运算能比%高效得多论述1.为了保证得到的新的数组索引和老数组索引一致。HashMap的初始容量是2的n次幂,扩容也是2倍的形式进行扩容,是因为容量是2的n次幂,可以使得添加的元素均匀分布在HashMap中的数组上,减少has原创 2021-02-07 00:37:12 · 15290 阅读 · 7 评论 -
Redis分布式锁详解
一、分布式简介什么是分布式,用最简单的话来说,就是为了较低单个服务器的压力,将功能分布在不同的机器上面;就比如:本来一个程序员可以完成一个项目:需求->设计->编码->测试但是项目多的时候,一个人也扛不住,这就需要不同的人进行分工合作了这就是一个简单的分布式协同工作了;二、分布式锁首先看一个问题,如果说某个环节被终止或者别侵占,就会发生不可知的事情这就会出现,设计好的或者设计的半成品会被破坏,导致后面环节出错;这时候,我们就需要引入分布式锁的概念;何为分布式锁?原创 2021-02-05 12:45:01 · 16879 阅读 · 1 评论 -
Linux非root用户安装JDK
前言假期在家连接学校服务器,想在服务器上安装JDK跑java程序,于是做了教程供大家参考。1.下载JDK1.8压缩包如果不知道怎么把包传给Linux,可以先把包放到QQ邮箱中转站,然后服务器上网页下载即可。链接:https://pan.baidu.com/s/1GzsuB9llYi0buMlrmr2JHg提取码:xsle2.解压得到文件夹在同一路径下打开控制台,输入以下指令解压:tar -zxvf jdk-8u151-linux-x64.tar.gz得到jdk文件夹3.设置环境变量原创 2021-02-03 18:57:15 · 16189 阅读 · 1 评论 -
字节、位与二进制表示
前言仅针对JAVA,总结几个知识点。字节与位1字节(byte)= 8位(bit)每个bit位非0即1,即二进制表达中的0或1,0001中每个“0”和“1”即为位。JAVA常见基本类型:byte 1字节short 2字节int 4字节long 8字节char 2字节(C语言中是1字节)可以存储一个汉字float 4字节double 8字节其中以int为例,int类型存储的最大的数不是232,而是-231~(231-1),因为正数最高位为0原创 2021-02-03 14:47:50 · 22607 阅读 · 3 评论 -
针对Comparator接口实现类进行总结
在做数组排成最小的数算法题时,对重写比较器进行了研究,现在进行总结。题目https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&&tqId=11185&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking小根堆排序https://leetcode-cn.com/problem原创 2021-01-21 21:35:18 · 17548 阅读 · 6 评论 -
ThreadLocal详细讲解
标题ThreadLocal详细讲解(小白都能看懂)一、ThreadLocal的作用:我初始化一个ThreadLocal变量target,初始值即为null;在进程1里,我将它设为1;在进程2里,我获取这个初始值,他还是null,同时我将它设成3;在进程3里,我获取它,还是null。各个进程对于这个变量的操作都是独立的。二、ThreadLocal源代码讲解1.创建ThreadLocal对象。ThreadLocal<Integer> target = new ThreadLoca原创 2021-01-06 17:51:20 · 18513 阅读 · 8 评论