java基础
文章平均质量分 58
caijibiandashen
这个作者很懒,什么都没留下…
展开
-
多益网络面经
reids是基于C语言开发的一套免费的开源数据库,基于纯内存进行操作,并根据reactor开发了一套自己的文件时间处理器模型,通过IO多路复用监听多个Socket,避免了线程切换带来的性能损耗,性高。ICMP协议,是“Internet Control Message Protocol”(Internet控制消息协议)的缩写,是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。继承是从已有的类中派生出新的类, 新的类能吸收已有类的修饰的数据属性和行为,并能扩展新的能力。原创 2022-09-08 16:22:38 · 933 阅读 · 1 评论 -
Lock锁和AQS
比如常见的ReentrantLock,其中内聚了Sync,实现了AbstractQueuedSynchronizer进行线程的同步管理。原创 2022-07-20 22:29:08 · 205 阅读 · 0 评论 -
SpringBoot开启以后想做些事情,咋办呢?
SpringBoot开启以后想做些事情,咋办呢?原创 2022-07-01 22:19:01 · 172 阅读 · 0 评论 -
未支付订单的过期删除策略
未支付订单的过期删除策略原创 2022-06-25 20:03:01 · 521 阅读 · 0 评论 -
异常记录之- org.thymeleaf.exceptions.TemplateInputException: Error resolving template
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [companyManage/importVillage], template might not exist or might not be accessible by any of the configured Template Resolvers at org.thymeleaf.engine.TemplateManager.resolveTemplat原创 2022-05-18 21:52:38 · 783 阅读 · 1 评论 -
水壶问题与裴蜀定理
水壶问题题目有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许:1-装满任意一个水壶2-清空任意一个水壶3-从一个水壶向另外一个水壶倒水,直到装满或者倒空因此可以说明,每次操作会使得最终的结果变化**(±)x或者(±)y**,都是整数,变化(x-y)类型其实也是一个x,以及一个-y。比如a=3, b = 5,目标值是4,应该怎么组装呢?得到 2b -原创 2022-05-03 10:36:13 · 360 阅读 · 0 评论 -
ReentrantLock之Condition用法和Synconsized的wait/notify方法
二者异同两者都是可重入锁,都是独占锁。synchronized 依赖于 JVM 而 ReentrantLock 依赖于 APIsynchronized是非公平锁,而 ReentrantLock 既可以是公平锁,也可以是公平锁。ReentrantLock 是等待可中断、可选择性通知。ReentrantLock 的newContion()public class Solution { static volatile int i = 0; static final Reentran原创 2022-05-01 11:59:45 · 311 阅读 · 0 评论 -
SpringSecurity用户密码验证过程
SpringSecurity过滤链当中的UsernamePasswordAuthenticationFilter负责登陆密码验证AbstractAuthenticationProcessingFilter是UsernamePasswordAuthenticationFilter的父接口,接口当中就有一个this.getAuthenticationManager()方法,获取AuthenticationManager对象。AuthenticationManager对象当中有一个方法:Authentica原创 2022-04-27 15:48:08 · 5011 阅读 · 2 评论 -
证明 sleep()方法不会释放已经抢得的锁
简介说说 sleep() 方法和 wait() 方法区别和共同点?两者最主要的区别在于:sleep() 方法没有释放锁,而 wait() 方法释放了锁 。两者都可以暂停线程的执行。wait() 通常被用于线程间交互/通信,sleep() 通常被用于暂停执行。wait() 方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的 notify() 或者 notifyAll() 方法。sleep() 方法执行完成后,线程会自动苏醒。或者可以使用 wait(long timeout) 超时后线程原创 2022-04-17 20:17:30 · 374 阅读 · 0 评论 -
final和static final
final 确保不变性及 值不会改变,基本类型保证值不变,引用类型保证引用值不会改变;static 确保唯一性 每个类就只有一个,所有实例对象共享这一个;static final 同时修饰的成员变量 不需要创建初始化对应的class对象即可 取到对应的值 不然为啥叫编译期常量而其他的final修饰的变量(不是和static 一起用的),就不是编译期常量,不会编译期进行赋值,而是类加载之后执行,当用final作用于类的成员变量时,成员变量必须在定义时或者构造器中进行初始化赋值stati.原创 2022-03-26 15:56:07 · 296 阅读 · 0 评论 -
类型转换的思考
类型转换有关向上造型和向下造型的核心精髓就是一句话:在创建实例的时候到底是子类的实例还是父类的实例。如果是子类的实例,则就完全可以进行强制类型转换,转换为子类,如果创建的是父类的对象,则不可以i强制类型转换。类型转换(继承或者实现关系 父类与子类)父类的引用指向子类的对象。实例化成子类,可用方法使父类中的方法,方法体实现是子类中的方法(体现了多态)。实例化成谁就会用到谁的方法体。//父类class A{ public void s(){ System.out.pri原创 2022-03-26 14:45:29 · 84 阅读 · 0 评论 -
vhr 使用freemark模板邮件发送 ,rabbitmq使用
实现邮件发送1.找一个账号发送邮件(自行百度)2.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>3.配置参数spring: mail: host:原创 2021-12-08 20:44:00 · 316 阅读 · 0 评论 -
直接内存直接内存
直接内存为什么速度快因为许哟啊通过用户空间地址,查询内核空间地址,然后从内核空间地址复制到用户内存地址,过程比较繁琐,同样,输出也是。而NIO是直接访问物理内存,省去了中间商,操作简单,快速。直接内存溢出与大小设置...原创 2021-09-15 22:49:21 · 45 阅读 · 0 评论 -
Timer定时器
Timer定时器源码:public class Timer { private final TaskQueue queue = new TaskQueue();//定时器队列 private final TimerThread thread = new TimerThread(queue);//定时器线程 首先看看TaskQueue 和 TimerThreadTaskQueueclass TaskQueue { //是timer中的类 ,属性有TimerTask数组,初始大小原创 2021-09-15 22:48:20 · 69 阅读 · 0 评论 -
方法区方法区
方法区方法区堆、栈、方法去关系方法区方法区大小设置如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入方法区堆、栈、方法去关系方法区虽然规范当中规定方法区在逻辑上可以看作堆的一部分,但是hostpot虚拟机认为方法区为为单独的一部分。方法区大小设置可原创 2021-09-15 22:46:56 · 2677 阅读 · 0 评论 -
对象实例化
对象实例化new 方式,变形1、2是要创建的对象的构造方法是私有的,不能直接构造对象,只可以通过该类方法或者其他类的静态方法构造。反射的方式,只可以使用无参且由public修饰的@CallerSensitive public T newInstance() throws InstantiationException, IllegalAccessException {任何修饰符、任何参数都可以使用@CallerSensitive public T newInstance(Object ...原创 2021-09-15 22:46:27 · 72 阅读 · 0 评论 -
堆空间参数设置
注意:伊甸园和S0/S1区默认大小比例为8:1新生代最大年龄默认为15查询特定参数C:\Users\lianlei>jps18900 Solution3960410968 Launcher20760 JpsC:\Users\lianlei>jinfo -flag suvivorRatio 18900no such flag 'suvivorRatio'C:\Users\lianlei>jinfo -flag SurvivorRatio 18900-XX...原创 2021-09-15 22:46:08 · 79 阅读 · 0 评论 -
虚拟机栈虚拟机栈
虚拟机栈为什么要用栈而不用寄存器?答:java是跨平台语言,如果用寄存器结构,则不同cpu架构不同,通用型下降。跨平台使用,指令集比较小,编译速度快(但是也导致实现相同功能需要的指令更多,性能较低。)堆和栈栈是每个线程都会创建一个,是线程私有的,每个栈的生命周期同步于线程的生命周期。内部保存的是一个个栈针,每个栈针对应这一个方法,栈顶方法称为当前方法。还会保存一部分变量(局部变量(八种基本变量),以及一些引用(应用类型数据的引用))与PC寄存器相比,也不需要使用GC回收,但是会出现OOM原创 2021-09-15 22:44:32 · 67 阅读 · 0 评论 -
运行时数据区
运行时数据区从类加载器过去以后就是运行时数据区,包括堆、方法区、本地方法栈等结构,执行引擎蛀牙负责操作并管理运行时数据区。一整个JVM当中只有一个运行时数据区,就是一个RunTime实例。采用比喻的方式就是如下图:堆、方法区等就是材料工具 是共享的执行引擎就是厨师 是非共享的,每个线程有自己的一部分程序计数器、虚拟机栈和本地方法区,也就是红色区域是共享的,灰色区域可以有任意个。操作台就是栈以及负责回垃圾的GC,(守护线程,运行在后台)运行时数据区具体组成元数据区和JIT编译产原创 2021-09-15 22:44:00 · 34 阅读 · 0 评论 -
双亲委派机制
双亲委派机制java虚拟机加载class文件是按需加载,当需要加载某个class文件的时候采用双亲委机制加载,就是把请求交给父类。为啥交给父类?因为如果不优先加载父类中的calss文件,可能会由于用户在类路径下自定义了相同名字的类,可能会出现错误,为了优先加载源码当中文件,因此使用双亲委派机制。既可以防止重复加载,又可以保护核心代码工作原理举例/** * @author Mr.Lian * @create 2021-09-05 11:39 **/public class Strin原创 2021-09-15 22:43:28 · 39 阅读 · 0 评论 -
线程池线程池
Lock锁和实战什么是lock锁?lock是可重复锁 ,可以多次使用 @Override public void run() { try { lock.lock();//打开线程锁 while (ticket.num >= 0) { try { buy(); } catch (InterruptedException e原创 2021-09-15 22:43:00 · 29 阅读 · 0 评论 -
JVM基础
JVM基础一、虚拟机与Java虚拟机1、虚拟机2、Java虚拟机3、JVM的位置二、JVM的整体结构三、Java代码的执行流程二次编译四、JVM的架构模型五、JVM的生命周期一、虚拟机与Java虚拟机1、虚拟机2、Java虚拟机3、JVM的位置通过javac等命令,将.java ===> .class(前端编译),编译成字节码文件,后提供给JVM虚拟机来编译(后端编译)二、JVM的整体结构方法区、堆: 多个线程共享Java栈、本地方法栈、程序计数器: 每个线程独有一份原创 2021-09-15 22:41:48 · 44 阅读 · 0 评论 -
类加载子系统 -JVM
类加载子系统 -JVM类加载子系统一、类加载器的三个阶段ClassLoader类加载过程链接阶段初始化阶段合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入类加载子系统结构简图一、类加载器的三个阶段分为加载阶段链接阶段初始化阶原创 2021-09-05 11:11:26 · 36 阅读 · 0 评论 -
Throwable 类源码详情
Throwable 类源码详情Throwable 类源码详情主要属性构造方法常用的方法Throwable 类源码详情主要属性 /** * Native code saves some indication of the stack backtrace in this slot. *///栈的回溯信息 private transient Object backtrace; //详细信息 private String detailMessage;原创 2021-08-28 23:04:24 · 158 阅读 · 0 评论 -
Arrays用法整理
Arrays用法整理默认比较器static final class NaturalOrder implements Comparator<Object> { @SuppressWarnings("unchecked") public int compare(Object first, Object second) { return ((Comparable<Object>)first).compareTo(second);原创 2021-08-21 18:30:28 · 151 阅读 · 0 评论 -
HashMap
HashMap解读简介HashMap,内部结构是 数组+链表/红黑树 构成,很多时候都是多种数据结构组合。创建构造方法,可选择带参数 initialCapacity 表示初始化容量大小(数组容量,只能是2的幂次方,如果不是就会改为大于输入值的最小的2的幂次方),loadFactor扩容加载因子 选填,其中 initialCapacity 默认为16,loadFactor 为0.75默认初始容量 DEFAULT_INITIAL_CAPACITY = 1 << 4 (16)最大容量原创 2021-08-13 15:20:37 · 77 阅读 · 0 评论 -
mybatis二级缓存
二级缓存定义二级缓存定义:二级缓存也称作是应用级缓存,与一级缓存不同的是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有更高的命中率,适合缓存一些修改较少的数据。二级缓存实现二级缓存的实现是通过CachingExecutor实现,可以通过本地内存存储,可以通过本地硬盘存储、甚至支持第三方缓存应用的存储(redis等)。具体代码是啥?俺现在也不知道,知道了再来补充。通过上述组成可以看出,二级缓存是优先于一级缓存的,因为执行器首先是一个CachingExecutor,然后在调用delega原创 2021-08-10 16:54:42 · 71 阅读 · 0 评论 -
mybatis一级缓存
mybatis一级缓存mybatis一级缓存:也叫做会话级缓存,生命周期仅存在于当前会话,不可以直接关关闭。但可以通过flushCache和localCacheScope对其做相应控制。一级缓存源码底层是map集合,其中的key是sql、statement等一共组成。value值就是查询的结果public class PerpetualCache implements Cache { private final String id; private final Map<Object原创 2021-08-09 22:26:24 · 184 阅读 · 0 评论 -
mybatis的Executor执行器
Executor学习记录Mybatis执行器学习Executor类别Executor结构图Executor选择Executor功能Mybatis执行器学习记录自己学习mybatis的艰难历程Executor类别SIMPLE: 默认的执行器, 对每条sql进行预编译->设置参数->执行等操作BATCH: 批量执行器, 对相同sql进行一次预编译, 然后设置参数, 最后统一执行操作REUSE: REUSE 执行器会重用预处理语句(preparedstatement)CachingEx原创 2021-08-08 19:35:08 · 174 阅读 · 0 评论 -
2021-06-04
参数传递改变问题分为基本类型(包括基本封装类型) 和 引用类型分为基本类型(包括基本封装类型) 不影响引用类型 影响string 等final 类型char数组 不影响转载于:https://www.cnblogs.com/erlongxizhu-03/p/10819516.html...转载 2021-06-04 22:14:00 · 37 阅读 · 0 评论