java
Handoking
聚沙成丘。
展开
-
温故而知新-JVM垃圾收集器
现在垃圾收集器均采用分代收集策略,新生代由于98%的对象都是朝生夕死,复制算法更合适,只复制还存活的对象,工作量小,所以效率高。显然复制算法不适合老年代,因为老年代中的对象大部分是大对象,且长时间存活,复制算法效率太低。老年代使用标记-清除,标记-整理算法更合适。c. 对CPU资源敏感。默认启动的线程 (CPU+3)/4,在CPU较少时,占用较多资源,影响用户线程资源。b. 无法收集浮动垃圾(浮动:并发清除过程中新产生待标记的对象)a. 标记-清除导致内存碎片太多,容易引起full-gc。原创 2023-07-21 00:13:06 · 425 阅读 · 0 评论 -
单点登陆SSO(二)认证中心登陆、验证
单点登陆单点登陆github单点登陆的原理客户端一拦截器认证中心代码单点登陆githubgithub:https://github.com/Handoking/Single-Sign-on单点登陆的原理客户端一拦截器认证中心代码这里并没有使用数据库,仅仅是使用了数据结构保存了session。同时只是为了实现两个客户端的登陆,所以直接验证了用户名和密码。数据结构类UserDB.clas...原创 2020-01-02 20:04:02 · 1171 阅读 · 0 评论 -
单点登陆SSO(一)原理、多客户端登陆
单点登陆单点登陆项目GitHub单点登陆的原理客户端一拦截器感谢coding老师的课程,让我能很好的学习,掌握单点登陆的相关知识,所有的代码都来自或者修改coding老师的视频,简单总结一下单点登陆项目GitHubgithub:https://github.com/Handoking/Single-Sign-on单点登陆的原理单点登陆最主要保证的就是一处登陆,处处登陆,也就是我们登陆t...原创 2020-01-02 19:28:58 · 1243 阅读 · 0 评论 -
Jackson注解的使用实例.摘记
目录jsonIncludejsonPropertyJsonIgnoreJsonIgnorePropertiesJsonIgnoreTypejsonInclude实体类/属性使用的注解,用于忽略NULL的属性,空的属性或者NULL的类.例如创建一个银行账户类,序列化时如果id为空,那么该属性将不会被序列化。为什么使用NON_NULL:比如读取数据库数据,空值如果序列化传输的,那么会出现空值的...原创 2019-10-15 11:38:06 · 247 阅读 · 0 评论 -
java8 HashMap put过程 源码分析
public V put(K key, V value) { return putVal(hash(key), key, value, false, true); }很明显是putVal方法来完成的,看看怎么说。 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, ...原创 2019-05-31 10:15:19 · 395 阅读 · 0 评论 -
java并发机制底层实现原理--偏向锁
目录为什么需要偏向锁偏向锁的加锁过程偏向锁的释放过程偏向锁的缺点为什么需要偏向锁在大多数的情况下,锁不仅不存在多线程的竞争,往往是某个线程多次获得锁。为了降低线程获得锁和释放锁带来的性能消耗,因此引入了偏向锁和轻量级锁。偏向锁主要是降低单线程访问时频繁加锁,释放锁的消耗,当前线程一旦获得锁,再无竞争的情况下,那么下次访问代码块相当于几乎零成本的获得锁,不需要维护轻量级锁。偏向锁的加锁过程一...原创 2019-06-14 16:07:13 · 379 阅读 · 0 评论 -
java并发机制底层原理--轻量级锁
目录轻量级锁加锁、解锁过程轻量级锁的优缺点偏向锁只允许一个线程同时访问,主要针对极少竞争的情况,可以减少加锁和释放锁的性能消耗。轻量级锁允许多线程同时访问对象,但是是顺序访问,一个线程拥有锁,其他线程自旋获取锁。轻量级锁加锁、解锁过程线程在执行同步块之前,JVM为当前线程的栈帧中创建存储锁记录的空间。1.首先将头对象中的MarkWord复制到锁记录中,然后线程尝试用CAS将头对象中的Mar...原创 2019-06-14 21:26:22 · 392 阅读 · 0 评论 -
自己写Java ArrayList
无需多解释了,有注释。扩容的大小是按照源码中的1.5倍来的,你可以随意。错误之处,请在评论区不吝赐教。/** * @ClassName MyArraylist * @Description TODO * @Author Handoking * @Date 2019/7/17 18:55 **/import java.util.Arrays;import java.util.O...原创 2019-07-23 16:25:43 · 299 阅读 · 0 评论 -
两种方法手写LRU(LinkedHashMap&&map+双链表)
前面注释掉的部分是简单的用LinkedHashMap写的LRU,属于没有技术含量,也不能很好的理解LRU.import java.util.HashMap;/** * @ClassName LRU 借助LinkedHashMap,重写removeEldestEntry,调用LinkedHashMap的size()方法来判断存入的元素个数。 * @Description TODO * @...原创 2019-07-23 16:36:45 · 765 阅读 · 0 评论 -
java7局部内部类访问外部变量final,java8不需要将变量设置为final?
导航为什么局部内部类只能访问外部的final变量?为什么java8不需要设置为final?为什么局部内部类只能访问外部的final变量?这里没有写版本号,严谨!!哈哈哈哈哈生命周期不同,当方法执行结束时,局部内部类如果依旧被引用,那么内部类不会死亡,也就意味着局部内部类访问的是一个不存在的变量,显然不合适。而事实上局部内部类不会产生访问以上问题,因为java编译时将局部内部类访问的变量已经拷...原创 2019-09-06 10:51:06 · 546 阅读 · 0 评论 -
java内部比较器和外部比较器
外部比较器,实现comparator,重写compare,以下例子实现包含对象的集合的排序。排序时调用的函数是collections.sort(list,比较器)。import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;/** *...原创 2019-05-24 16:39:57 · 2036 阅读 · 0 评论 -
简单易懂-线程池
为什么要线程池频繁的创建和销毁线程会降低系统效率,寻求一种线程复用的方式,那么可以使用缓存的策略,也就是使用线程池。简单说就是线程复用,提高效率,节约资源。线程池是怎样的线程池的核心类:ThreadPoolExecutorThreadPoolExecutor、AbstractExecutorService、ExecutorService和ExecutorExecutor:一个顶层接口,在...原创 2019-05-05 20:15:13 · 254 阅读 · 0 评论 -
多线程创建方式
继承 Thread 类public class MyThread extends Thread{//Thread本质上还是实现了Runnable接口 public void run{ System.out.println("MyThread.run()"); }}MyThread myThread1 = new MyThread();myThread1.start();//sta...原创 2019-05-05 11:50:30 · 206 阅读 · 0 评论 -
记java时间格式大小写的区别
import java.util.*;import java.text.*;public class Datedemo{ public static void main(String[] args) { Date date = new Date(); SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss...原创 2018-09-27 10:21:12 · 2989 阅读 · 0 评论 -
java指定编码的按行读写txt文件(几种读写方式的比较)
输入输出的几种形式1.FileReader,FileWriter File r = new File("temp.txt") FileReader f = new FileReader(name);//读取文件name BufferedReader b = new BufferedReader(f);//缓冲写入,提供了readline函数,可以按行读取。 Srting ...原创 2018-10-16 20:40:02 · 5985 阅读 · 1 评论 -
【夹娃系列】java面试基础知识储备(¥1)——java的优点和C++的异同点
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...原创 2018-10-19 21:04:38 · 237 阅读 · 0 评论 -
输出整数二进制表示时1的数目
难倒是不难,倒是学到了一个巧妙的方法,加上对位操作的不熟悉,特此记录class Solution{ public int NumOf1(int n){ int count=0; int flag=1; while((n&flag)!=0){ count++; flag=flag<<1; } return count; }}class ...原创 2018-11-06 20:36:00 · 197 阅读 · 0 评论 -
实现double类型的整数次方的运算
记录一下,原因是这个方法我没有想到。首先是特殊情况考虑不全,其次是在在进行计算时,没有想到这么巧妙的方法。public class Main{ public double solution(double base,int exp){ if(exp==0)return 1.0; if(base==0.0){ if(exp<0)...原创 2018-11-07 20:20:10 · 1009 阅读 · 0 评论 -
【夹娃系列】java面试基础知识储备(¥2)——JVM内存划分和内存溢出异常的原因和解决方法
JVM内存划分和内存溢出JVM内存划分内存溢出的异常和解决办法JVM内存划分内存溢出的异常和解决办法1.Java.lang.OutOfMemoryError: PermGen space原创 2018-11-17 14:48:47 · 330 阅读 · 0 评论 -
Thread类的sleep,join,interrupt方法
sleep()、join()import java.lang.Thread;import java.io.IOException;public class Test3 { private int i = 10; private Object object = new Object(); public static void main(String[] args) throws ...原创 2019-02-25 21:25:08 · 601 阅读 · 0 评论 -
Spring MVC原理1-DispatcherServlet
在整个 Spring MVC 框架中,DispatcherServlet 处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应工作。在看 DispatcherServlet 类之前,请求处理的大致流程:Tomcat 启动,对 DispatcherServlet 进行实例化,然后调用它的 init() 方法进行初始化,在这个初始化过程中完成了:对 web.xml 中初始化参数的加载;建...原创 2019-05-05 10:34:22 · 201 阅读 · 0 评论 -
举例详解java实例变量,静态变量,局部变量
public class Variable{ public int m,n;//对子类可见的实例变量 private double k;//只对本类可见的实例变量,一般情况下,设为私有,通过使用访问修饰符来被子类使用。 public static String P;//静态变量(类变量),一般为public,使用大写字母。 public Variable(int x,int y) {...原创 2018-09-20 16:49:41 · 1095 阅读 · 1 评论