面试题专栏
灵魂溜达师
技术带动灵魂,随手指蹦跶.....
展开
-
JVM内存溢出的定位与分析
一、内存溢出的初步认识及分析如果出现内存溢出,首先我们先定位到发生内存溢出的环节,并且进行分析,是正常还是非正常情况,如果正常需求,则考虑增加JVM的内存设置,如果非正常需求,那么要对代码进行修改,修复bug定位方法:借助jmap与MAT工具进行定位分析jstat命令可查看堆的使用情况及垃圾回收情况。用法:jstat –gcutil pidS0 S1 E 为新生代O为老年代M是元区间(方法区)YGC新生代执行次数YGCT新生代执行时间FGC老年代执行次数FGCT老年代执行时间G.原创 2021-07-09 11:10:47 · 401 阅读 · 0 评论 -
线程池原理(一)
一.线程池的实现原理线程池就是一个线程集合workerSet和一个阻塞队列workQueue,当用户向线程池提交一个任务(线程)时,线程池会先将任务放入workQueue,workerSet中的线程会不断的从workQueue中获取线程然后执行.当workQueue中获取线程然后执行,当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就去出来继续执行.二.线程池的几个主要的参数1.corePoolSize:线程池基本大小,规定线程池有几个线程(worker)在运行2.原创 2021-05-24 15:01:18 · 163 阅读 · 0 评论 -
分布式锁的三种实现方式
分布式锁三种实现方式:基于数据库实现分布式锁;基于缓存(Redis等)实现分布式锁;基于Zookeeper实现分布式锁;一, 基于数据库实现分布式锁悲观锁利用select … where … for update 排他锁注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。乐观锁所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不原创 2021-05-20 14:40:53 · 110 阅读 · 0 评论 -
Java使用spring中设计模式
设计原则:1.单一原则:一个类只负责一个职责只有逻辑足够简单,才可以再代码级别上违反单一职责的原则,只有类中方法数量足够少,才可以再方法级别上违反单一职责的原则可以降低代码的复杂度,一个类只负责一项职责,其他逻辑肯定要比负责多想职责简单的多,提高类的可读性,提高系统的可维护性变更引起的风险降低,变更是必然的2.里氏替换原则 === LSP :面向对象设计的基本原则之一.子类可以扩展父类的功能,但是不能改变父类原有的功能继承复用的基石,只有当衍生类也能够在基类的基础上增加新的行为,软件单位的功.原创 2021-04-28 20:40:16 · 117 阅读 · 0 评论 -
MySQL分库分表之易懂版(原则、方案、策略及难点)
分库分表:mysql表中最大的数据量为2000万,优化后可以最大达到5000万原则:1.能不分就不分2.数据量太大,正常运维影响正常业务访问3.表设计不合理,需要对某些字段垂直拆分4.某些数据出现无穷增长5.安全性和可用性考虑6.业务耦合性考虑方案:1.垂直拆分 大表拆小表 根据列(字段)进行拆分优点:数据简单维护缺点:主键出现冗余,需要管理冗余列2.水平拆分 某种策略将数据分片来储存 分为库内分表和分库分表两部分,每篇数据会分散到不同的MySQL表或库里面,达到分布式效果..原创 2021-04-27 19:38:54 · 319 阅读 · 0 评论 -
redis新面试题整理及面试作答
一、redis的数据结构有哪些,及使用场景String-字符串 String类型是二进制安全的,可以包含任何数据,场景:1.缓存 2计数器 3 session Hash-键值对结构 场景:1.缓存 比string节省空间,存用户信息,视频信息等 list -链表 有序 场景: 1.timeline 如:微博的时间轴 set集合 无序 场景: 1.标签 2.点赞 3.收藏 zset有序集合 场景: 1.排行榜 ,如小说排行榜二、redis緩存雪崩、击穿、穿透原因及解决方案雪崩:原因...原创 2021-04-22 12:13:48 · 66 阅读 · 0 评论 -
为什么要同时重写hashcode和equals
如果我们对一个对象重写了equals 方法,意味着只要对象的成员变量值都相等那么equals 就返回true ,但在不重写 hashcode 方法的情况下,当我们重新 new 了一个新对象。此时,当原对象.equals(新对象)等于true时,两者的 hashcode 却是不一样的,由此会产生了理解的不一致,也违反了equals 与 hashcode的约定规则。...原创 2021-04-14 11:04:10 · 97 阅读 · 0 评论 -
hashmap的原理,容量为什么是2的幂次
HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null 值, 因为key不允许重复,因此只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不能相同。HashMap是线程不安全的。HashMap和Hashtable的区别:两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高原创 2021-04-14 10:45:34 · 154 阅读 · 0 评论 -
java 线程池的实现原理
java线程池的实现原理很简单,说白了就是一个线程集合workerSet和一个阻塞队列workQueue。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。workerSet中的线程会不断的从workQueue中获取线程然后执行。当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就取出来继续执行。...原创 2021-04-14 10:38:48 · 97 阅读 · 0 评论