自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 synchronized细节

之前面试京东健康的时候被问到的问题:synchronized与Lock的区别是什么,关于synchronized的底层实现没回答得很详细,因此在此记录下synchronized的作用主要有三个:原子性:确保线程互斥的访问同步代码;可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的 “对一个变量unlock操作之前,必须要同步到主内存中;如果对一个变量进行lock操作...

2019-12-16 16:57:36 141

原创 Mybatis源码阅读

关键的类SqlSessionMybatis暴露给用户的最顶层接口,内部集成了数据库的增删改查操作以及执行操作的执行器,这个类的实例是不能被多线程共享的,因此在spring中每一次访问service都会新建一个SqlsessionConfiguration配置信息存储类,将XML的配置信息加载到内存中并以属性的方式存储到这个类中,其中Mapper相关的存储在MapperRegister类中...

2019-11-27 22:17:01 111

原创 Java线程池参数

通过构造函数分析线程池public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...

2019-11-25 10:16:49 331

原创 为什么重写equals则一定需要重写hashcode

主要是为了避免Map,Set内出现重复的元素。equals是判断两个对象是否相等的判断依据。而hashcode在map中是用来查找对应的对象在数组的下标的。如果equals被重写了而hashcode没有被重写,那么意味着2个equals相同(实际也就是相同)的对象,他们有着不同的数组下标,那么一个map里就有可能出现2个相同的key了,这明显是不合规矩的重写equals应满足...

2019-10-11 22:17:29 75

原创 JVM之类加载机制

世界上永远存在这样一类人,他能够超越自己的家庭、血缘、环境,他能够挣脱时代对他的束缚,让世界另眼相看。类加载过程1 加载1.1 做了什么这个阶段,jvm需要做一下三个事☐ 通过一个类的全限定名来获取其定义的二进制字节流。☐ 将这个流所代表的静态数据结构转化为方法区中的运行的时数据结构☐ 在java堆中生成一个java.lan...

2019-10-07 21:31:38 242

原创 String,StringBuffer与StringBuilder的比较

共同点:1 都是字符串相关,底层的实现都是char数组2 类都是final的,意味着不可以被继承区别:String的value数组是private final的,这意味者他的值是不可以被修改的。而StringBuffer StringBuilder都是继承AbstractStringBuilder的,他们的value数组都可以通过数组进行修改。在修改之前会检测数组的大小是否能容纳下...

2019-09-21 20:42:52 85

原创 leetcode-95-不同的二叉搜索树 II

题目链接https://leetcode-cn.com/problems/unique-binary-search-trees-ii/submissions/思路:将1-n中的任意一个数视为树的根节点,左边的视为左子树,右边视为右子树。然后递归的对左右子树进行这种操作。public List<TreeNode> generateTrees(int n) { ...

2019-09-20 13:03:55 52

原创 4-8

学习线上机器cpu100%了,如何排查?(死循环排查)举例:public void log(msg) { try{ //throw Exception(); } catch(Exception e) { log(msg); }}解决步骤:找到是哪条进程引起的,主要找进程idtop -c使用pid找到是哪条线程引起...

2020-04-09 08:44:54 143

原创 4-7

美团基础架构部门风控组面试讲讲实习,实习做了什么讲讲项目,讲讲项目中使用的设计模式,讲讲redis在项目中的使用(没回答好,如zset的使用)讲讲synchronized,ReetreentLock,aqs讲讲Java集合框架讲讲gc算法讲讲cms讲讲一个对象从创建到死亡经历过程讲讲MySQL事务,事务隔离级别,讲讲可重复读的实现原理(临键锁+快照读)算法:通过一个序列构造一...

2020-04-07 23:47:35 157

原创 4-6学习

学习kafka消息队列,zookeeper复习数据库MySQL复习Redis,特别关注集群部分,主从复制部分准备明天美团面试一:消息队列的作用/优点解耦接触消费者与生产者之间复杂的调用关系2. 异步a系统查询完成之后调用b系统,只有等b系统返回才能继续这是同步。a系统查询完成之后直接把消息放入消息队列,然后就不用管了,这是同步。3. 削峰A 系统调用 B 系统处理数据,...

2020-04-06 23:10:20 193

原创 Redis持久化

一 : RDBRedis会定期保存数据快照至一个rbd文件中,并在启动时自动加载rdb文件,恢复之前保存的数据。可以在配置文件中配置Redis进行快照保存的时机:save [seconds] [changes]意为在[seconds]秒内如果发生了[changes]次数据修改,则进行一次RDB快照保存,例如save 60 100会让Redis每60秒检查一次数据变更情况,如果发生了100...

2020-02-25 21:45:04 85

原创 Redis集群

什么是集群所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。1. 主从复制和MySQL一样,为了实现读写分离以减轻数据库的读的压力也就是读写分离,因此需要有一种主从复制的机制。实际上Redis的主从复制与MySQL的区别并不是很大。命令:slave of全量同步在从服务ping通主服务器之后,也就是与主服务器建立好了连接之后,开始进行全量同...

2020-02-25 21:34:41 71

原创 kotlin类与继承

类的特点所有字段必须有一个初始值,除非被lateinit 修饰表示为延迟初始化构造函数主构造器主构造器中不能包含任何代码,初始化代码可以放在初始化代码段中,初始化代码段使用 init 关键字作为前缀。次构造器使用次级构造器需要直接或间接的关联到主构造器,次级构造器的代码执行之前,会先执行关联的初始化方法/// 可把field的定义方法主构造方法中/// 若无其他修饰符,主构造...

2020-02-24 18:54:06 362

原创 Kotlin总览

kotlin是我学习的第四门语言了(c,JavaScript,Java),目前初学的感觉,他和JavaScript是差不多的。作为谷歌的亲儿子,还是可以认真学习下的,相信其他的google出品的如go应当也是差不多的语言特点无需分号结尾语句自动类型推测当一个引用可能为 null 值时, 对应的类型声明必须明确地标记为可为 null。基础语法包定义package my.ex...

2020-02-24 18:51:49 127

原创 leetcode 51 N皇后问题

经典的回溯算法问题我们需要想清楚2点需要使用回溯算法如何判断两个皇后是否可以相互攻击回溯算法就不需要多说了。判断2个皇后是否可以相互攻击,主要看是否是同一行,同一列,或者同一对角线的。我们可以开额外的空间存储存储同列的,同行的,同对角线的坐标,同对角线的怎么把他们用一个确定的数字表示呢?我们可以把他们分为2类从右下角到左上角,也就是斜率为-1这条线上的坐标均有 x+y = k(常...

2020-01-28 14:14:36 189

原创 leetcode 343 整数拆分

package undone;public class t343 { public static void main(String[] args) { t343 t = new t343(); Solution solution = t.new Solution(); System.out.println(solution.integerBre...

2020-01-28 10:42:04 125

转载 Java内部类为什么可以访问外部类的private方法?

在Java编程中,使用private关键字修饰了某个成员,只有这个成员所在的类和这个类的方法可以使用,其他的类都无法访问到这个private成员。上面描述了private修饰符的基本职能,今天来研究一下private功能失效的情况。Java内部类在Java中相信很多人都用过内部类,Java允许在一个类里面定义另一个类,类里面的类就是内部类,也叫做嵌套类。一个简单的内部类实现可以如下clas...

2020-01-03 09:45:53 2977

原创 和为K的子数组

leetcode一看到子数组的题,应该要马上想到这种前缀和的解法,即为 子数组(i - i+n)= k,那么肯定有(0 - n) - (0 - i) = k,因此我们只需要存储每一个0到i的值就可以了。class Solution { public int subarraySum(int[] nums, int k) { if(nums == null) { ...

2020-01-02 21:41:11 117

原创 Java内存泄露与内存溢出

在这个题上折了几次了,之前面腾讯的时候就没有回答好,然后头条1面又面了这个。什么是内存泄露在Java中,存在一些被分配的对象,这些对象已经无用了但是却无法被gc回收,这种情况被称为内存泄露。什么是内存溢出指的是有由于程序中有不可回收的或是使用的内存过多,最终导致程序运行需要的内存小于能提供的最大内存,此时程序将会抛出oom异常然后奔溃。因此,内存泄露可能(不一定)会导致内存溢出举例...

2020-01-01 21:08:22 101

原创 fail-fast 与 fail-safe 机制

是什么?是集合框架中的Collection集合的两种应对并发修改的方法什么是并发修改?当一个线程使用迭代器遍历一个Collection的时候,如果另一个线程对其进行了修改,这种情况就被叫做并发修改。 为什么我们需要应对这种问题呢?因为迭代器他的原理实际上还是使用了一个数组的下标实现的对集合元素的遍历。 public boolean hasNext() { //返回...

2020-01-01 17:00:46 147

原创 Redis页淘汰策略

noevition 默认使用的,不进行淘汰,因此当内存达到使用阈值时,在进行内存申请会报错volatile-lru LRU算法(最近最早使用),淘汰的对象仅为设置了过期时间的Allkeys-lru LRU算法,淘汰的对象为所有的对象Volatile-random 随机数据淘汰,只针对设置了过期时间的Allkeys-random 随机数据淘汰,针对的是所有的对象Volatile-...

2019-12-30 13:25:07 122

原创 不用加减乘除做加法

不用加减乘除做加法题目链接选自剑指offer65public class Solution { public int Add(int num1,int num2) { int sum, carry; while(num2 != 0) { sum = num1 ^ num2; carry = (num1 &...

2019-12-23 11:38:23 80

原创 leetcode 239 计算滑动窗口最大值

https://leetcode-cn.com/problems/sliding-window-maximum/采用双向队列的方法,代码 如下class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums == null || nums.length == 0 || nums.lengt...

2019-12-22 16:11:44 72

原创 创建型、行为型、结构型设计模式

设计模式总览创建型对对象的创建过程进行封装,抽象了对象的实例化过程如:单例模式,工厂模式,建造者模式,原型模式,抽象工厂模式行为型行为型模式是对在不同的对象之间划分责任和算法的抽象化,行为型模式不仅仅关注类和对象的结构,而且重点关注他们之间的相互作用,通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。如:策略模式、命令模式、模板模式、观察者模式...

2019-12-21 19:46:59 163

原创 JDK 监控和故障处理工具总结

JDK 监控和故障处理工具总结JDK 命令行工具这些命令在 JDK 安装目录下的 bin 目录下:jps(JVM Process Status): 类似 UNIX 的ps命令。用户查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息; jstat( JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行...

2019-12-20 20:39:04 84

原创 静态语言,动态语言,强类型,弱类型比较

静态语言与动态语言:指在编译时定义变量时是否需要明确指定变量的类型,如Java这类静态语言就需要 int a ; 而js这类动态语言只需要 var a ;强类型与弱类型指是否支持隐式类型转换,如 js中 将字符串转为整型就不需要类型强转,而是由解释器自动转型了,而Java就需要 (int) a进行类型强转...

2019-12-08 13:20:51 109

原创 leetcode找出数组中出现1次的数字

leetcode-找出数组中出现1次的数字例题1 https://leetcode-cn.com/problems/single-number/给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。解析:由于公式 a ^ a = 0.又 b & 0 = b因此我们直接遍历数组之后全部异或就行 class Solution {...

2019-12-06 16:48:31 297

原创 计算机网络面试题

HTTP请求报文<method> <request-URL> <version><headers><entity-body>响应报文<状态码> <状态码解释> <version><headers><entity-body>1. http 0.9,http...

2019-11-29 20:41:08 207

原创 Spring事务隔离与传播机制

五大事务隔离级别DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 .READ_UNCOMMITTED 不可提交读,会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )READ_COMMITTED 提交读,会出现不可重复读、幻读问题(锁定正在读取的行)REPEATABLE_READ可重复读,会出现幻读问题SERIALIZABLE 穿...

2019-11-27 10:09:28 89

原创 Spring bean生命周期

乾坤未定,你我皆为黑马。流程图如下相关类BeanFactoryPostProcessor在bean实例化之前,可以修改bean的属性,也就是说他实际上修改,操作的是 BeanDefinition,我们可以类比他xml里的property。一定要注意的是,千万不要在这里初始化bean。BeanPostProcessor与BeanFactoryPostProcessor不同...

2019-11-26 21:21:40 113

原创 缓存常见问题

所有这些缓存的问题都是因为为使用缓存查询数据而导致的对数据库造成的瞬间压力使用缓存带来的影响以为牺牲数据一致性为代价换来了更大的并发量缓存穿透顾名思义,穿透的意思是缓存层永远不起作用。缓存相关的请求,我们的操作流程一般为:1 查询缓存中是否存在这一条数据2 如果不存在则查询数据库3 如果数据库中存在这一条数据,则将数据刷新到缓存中,如果不存在则...

2019-09-29 21:41:09 110

原创 Netty常见问题

为什么选择Netty原生的NIO有JDK epoll空轮询bugbug描述对于突然中断的Socket连接,jdk底层的对epoll的实现可能出现bug,这个bug表现为selector.select()不会阻塞,而是直接返回,此时是并没有事件发生的。因此select()的返回值会为0,那么while循环就会一直循环执行,最终可能导致cpu占用率达到100%Netty如何解决这个问...

2019-09-21 16:04:23 599

原创 Netty服务器端启动流程

标准的Netty服务端代码格式如下 ServerBootstrap bootstrap = new ServerBootstrap(); ///创建2个线程池,boss用于接待新来的请求,worker用于处理请求 NioEventLoopGroup boss = new NioEventLoopGroup(); NioEventLoopGro...

2019-09-20 17:13:31 255

原创 JVM之内存管理

如下为深入理解Java虚拟机中的图程序计数器 这部分是线程私有的,用于表示当前程序执行的位置,虚拟机通过修改这个计数器的值选取下一条执行的命令。虚拟机栈 线程私有的,生命周期与线程相同。描述的是Java方法(区别于native的本地方法)执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储操作局部变量表、栈、动作...

2019-09-19 22:17:20 72

原创 JDK JRE JVM联系与区别

JDKJava程序开发环境。包含 bin目录(最重要的是提供javac编译)以及jre。在jdk中有2个jre,一个是开发时使用,一个在程序运行时使用。总而言之,JDK包含JREJREJava运行环境。用于运行.class文件。JRE包含JVMJVMJava字节码执行平台,将字节码解释为所属操作系统的机器指令,这也就是Java能一次编译,处处运行的关系。...

2019-09-19 22:04:09 193

原创 JVM之垃圾回收机制

1 什么是垃圾回收 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。1.1什么时候回收a:System.gc()b : 根据Eden区和FromSpace区的内存大小来决定。当内存大小不足时,则会启动GC线程并停止应用线程。2 哪些内存需要回收2.1...

2019-09-18 21:18:00 170

转载 NIO详解

IBM 大神文章https://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html

2019-02-27 10:11:53 127

原创 RAS加密解密+base64编码

public class EncryptAndDecrypt { static final Base64.Encoder encoder = Base64.getEncoder(); static final Base64.Decoder decoder = Base64.getDecoder(); public static void main(String[] ar...

2019-02-08 14:05:39 1839

原创 MySQL 锁机制

锁机制 :解决因资源共享 而造成的并发问题。    示例:买最后一件衣服X    A:      X    买 :  X加锁 -&gt;试衣服...下单..付款..打包 -&gt;X解锁    B:    X       买:发现X已被加锁,等待X解锁,   X已售空    分类:    操作类型:        a.读锁(共享锁): 对同一个数据(衣服),多个读操作可以同时进行...

2019-01-10 20:57:51 76

原创 深入浅出ES6以及对于JavaScript的一些想法

该来的总会来的,比如现在总结的ECMAScript6,又比如半个月后的期末考试。一:变量 let const在es6之前,我们定义变量都是用的var的方式,但是我确实花了不少的时间理解var的变量定义方式,var定义变量的作用域是整个函数范围,而不是类似于c语言的在一个大括号内,严谨的说也就是没有所谓的“块级作用域”,这被视为是JavaScript的一个缺点,如下代码: for(var i=0;...

2018-06-01 20:58:03 937

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除