面试类
面试类
别抢我蓝buff
这个作者很懒,什么都没留下…
展开
-
什么是CAS机制,通俗易懂大白话版
我们先看一段代码: 启动两个线程,每个线程中让静态变量count循环累加100次。 最终输出的count结果一定是200吗?因为这段代码是非线程安全的,所以最终的自增结果很可能会小于200。我们再加上synchronized同步锁,再来看一下。 加了同步锁之后,count自增的操作变成了原子性操作,所以最终输出一定是count=200,代码实现了线程安全。虽然synchronized确保了线程安全,但是在某些情况下,这并不是一个最有的选择。 关键在于性能问题。 synchr...原创 2020-09-04 11:29:32 · 628 阅读 · 0 评论 -
ConcurrentHashMap 1.7和1.8区别
ConcurrentHashMap 与HashMap和Hashtable 最大的不同在于:put和 get 两次Hash到达指定的HashEntry,第一次hash到达Segment,第二次到达Segment里面的Entry,然后在遍历entry链表(1) 从1.7到1.8版本,由于HashEntry从链表 变成了红黑树所以 concurrentHashMap的时间复杂度从O(n)到O(lo...转载 2020-09-02 16:20:56 · 2652 阅读 · 1 评论 -
java什么是双亲委派,为什么它可以保证安全?
java什么是双亲委派,为什么它可以保证安全? ...原创 2020-07-23 09:41:47 · 393 阅读 · 0 评论 -
Https原理及流程
https://www.jianshu.com/p/14cd2c9d2cd2原创 2020-03-17 15:37:58 · 241 阅读 · 0 评论 -
union all和union的区别
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排...原创 2020-03-17 14:54:11 · 112 阅读 · 0 评论 -
Java并发包中常用类
Java并发包中常用类小结(一)从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况。1、ConcurrentHashMapConcurrentHashMap其实就是线程安全版本的hashMap。前面我们知道HashMap是以链表的形式存放hash冲突的数据,以数组形式存放HashEnt...原创 2020-03-16 09:39:06 · 280 阅读 · 0 评论 -
什么是CAS机制?如何解决ABA问题?
你知道什么是CAS机制吗?CAS和Synchronized的区别是什么?适用场景呢?优点与缺点呢?我们先来看一手代码:启动两个线程...原创 2020-03-16 09:34:19 · 1271 阅读 · 0 评论 -
AQS详解(面试)
AQS原理AQS:AbstractQuenedSynchronizer抽象的队列式同步器。是除了java自带的synchronize...转载 2020-03-16 09:26:39 · 431 阅读 · 0 评论 -
系统并发量及QPS简单解释
PV 即 page view,页面浏览量 用户每一次对网站中的每个页面访问均被记录1次。用户对同一页面的多次刷新,访问量累计。UV 即 Unique visitor,独立访客 通过客户端的cookies实现。即同一页面,客户端多次点击只计算一次,访问量不累...原创 2020-03-16 09:05:15 · 1834 阅读 · 0 评论 -
redis除了做缓存还可以做什么
Redis应该说是目前最受欢迎的NoSQL数据库之一了。Redis通常被作为缓存组件,用作缓存数据。不过,除了可以缓存数据,其实Redis可以做的事还有很多。下面列举几例,供大家参考。1、最新列表(推荐学习:Redis视频教程)例如新闻列表页面最新的新闻列表,如果总数量很大的情况下,尽量不要使用select a from A limit 10,尝试redis的 LPUSH命令构建L...原创 2020-03-15 23:11:00 · 2709 阅读 · 0 评论 -
sql优化的几种方式
一、为什么要对SQL进行优化我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化,而随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL...转载 2020-03-15 23:00:53 · 93 阅读 · 0 评论 -
@MapperScan注解
在不使用@MapperScan前,我们是直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,麻烦。通过使用@MapperScan注解,可以让我们不用再每个Mapper类都添加@Mapper注解1、@Mapper注解:作用:在接口类上添加了@Mapper,在编译...转载 2020-03-14 21:27:31 · 919 阅读 · 0 评论 -
String类中常用的方法
1.String的构造方法1)String(String original):把字符串数据封装成字符串对象2)String(cha...原创 2020-03-12 20:52:17 · 112 阅读 · 0 评论 -
面试题:hashcode相等两个类一定相等吗?equals呢?相反呢?
首先如果hashcode相等的话,这两个类也是不一定相等的,如果是反过来的话(通常情况下,如果两个对象的内容相同,两个对象的hashc...原创 2020-03-12 20:39:17 · 352 阅读 · 0 评论 -
Spring Boot(八):SpringBoot项目如何部署上线(两种方式 jar包和war包)
项目部署一般是两种方式:一种是打包成 jar 包直接执行,另一种是打包成 war 包放到 tomcat 服务器下。springboot一般情况下默认为jar包方式,这里我把jar包和war包两种方式都记录一下*默认maven管理项目 !!!1、jar包方式:a、先用mvn clean清理一下;b、忽略...原创 2020-03-12 20:25:12 · 501 阅读 · 0 评论 -
Spring整合RabbitMQ 一直收到重复消息怎么处理
下面是RabbitMQ的消息确认机制:“为了确保消息不会丢失,RabbitMQ支持消息确认机制。客户端在接受到消息并处理完后,可以发送一个ack消息给RabbitMQ,告诉它该消息可以安全的删除了。假如客户端在发送ack之前意外死掉了,那么RabbitMQ会将消息投递到下一个consumer客户端。如果有多个consumer客户端,RabbitMQ在投递消息时是轮询的。RabbitMQ如何判断客户...原创 2020-03-12 19:36:27 · 2434 阅读 · 0 评论 -
缓存穿透、缓存击穿、缓存雪崩丶缓存倾斜
缓存处理流程缓存穿透缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在...原创 2020-03-10 16:10:52 · 399 阅读 · 0 评论 -
mysql中explain的type的解释
导语:很多情况下,有很多人用各种select语句查询到了他们想要的数据后,往往便以为工作圆满结束了。这些事情往往发生在一些学生亦或刚入职场但之前又没有很好数据库基础的小白身上,但所谓闻道有先后,只要我们小白好好学习,天天向上,还是很靠谱的。当一个sql查询语句被写出来之后,其实你的工作只完成了一小半,接下来更重要的工作是评估你自己写的sql的质量与效率。mysql为我们提供了...转载 2020-03-10 14:49:29 · 185 阅读 · 0 评论 -
深入JVM 原理(五)Java堆内存调整参数(调优关键)
目录 深入JVM 原理(一)Java内存模型:http://blog.csdn.net/qq_34707744/article/...原创 2020-03-08 22:13:33 · 208 阅读 · 0 评论 -
JConsole可视化工具介绍
JConsole 可视化工具介绍一、 JConsole介绍1.1 JConsole描述 Jconsole (Java Mon...原创 2020-03-08 22:11:58 · 120 阅读 · 0 评论 -
面试官:说说双亲委派模型?
https://baijiahao.baidu.com/s?id=1633056679004596814&wfr=spider&for=pc原创 2020-03-08 21:07:03 · 99 阅读 · 0 评论 -
死锁原因及定位分析
这里描述的是死锁的其中一种情况 1、什么是死锁? 死锁是指两个或者两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉,那它们就无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很底,否则就会因为争夺有限资源而陷入死锁。2、死锁...原创 2020-03-08 16:47:08 · 169 阅读 · 0 评论 -
springmvc之转发和重定向
https://www.jianshu.com/p/90ece6d5fcf4原创 2020-03-08 15:23:33 · 91 阅读 · 0 评论 -
jsp面试题
浏览器jsp,html之间的关系 1.JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览2.在大多数Browser/Server结构的Web应用中,浏览器直接通过HTML或者JSP的形式与用户交互,响应用户的请求3.JSP在服务器上执行,并将执行结果输出到客户端浏览器,我们可以说基...原创 2020-03-08 15:09:26 · 2034 阅读 · 0 评论 -
mysql中大文本的数据类型
工作中,经常会使用一个字段存储多张图片的路径,使用逗号分隔,如果使用text数据类型,经常会出现数据太长的问题,所以直接使用longt...原创 2020-03-08 10:50:26 · 1745 阅读 · 0 评论 -
2019年前端常见jQuery面试题
一、$(document).ready() 是个什么函数?为什么要用它?ready() 函数用于在文档进入ready状态时执行代码。当DOM 完全加载(例如HTML被完全解析DOM树构建完成时),jQuery允许你执行代码。使用$(document).ready()的最大好处在于它适用于所有浏览器,jQue...原创 2020-03-08 10:36:48 · 201 阅读 · 0 评论 -
volatile和synchronize的区别
文章目录原子性(atomicity)和可见性(visibility)volatile使用场景synchronized区别原子性(at...原创 2020-03-08 10:13:45 · 356 阅读 · 0 评论 -
JVM老年代和新生代的比例
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样...原创 2020-03-06 11:06:10 · 1601 阅读 · 0 评论 -
理解类加载机制
一般来说,我们日常的开发都是在IDE上进行的,这能让我们将更多的注意力放在业务的处理上,但是久而久之我们就忘记了其底层的实现原理。这是一把双刃剑,我们看不到底层实现,但是当有某些问题出现的时候,也只有理解了其底层原理,才能更好的解决问题。类加载的基本原理在完成代码的编写之后,编译器会将我们的java文件编...原创 2020-03-06 10:12:10 · 99 阅读 · 0 评论 -
MySQL如何建立索引
create table if not exists `article`( id int(10) unsigned not n...原创 2020-03-02 09:20:29 · 107 阅读 · 0 评论 -
数据库查询优化:使用explain分析sql语句执行效率
Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。Explain语法:explain select … from … [where …]例如:exp...转载 2020-03-02 09:11:39 · 198 阅读 · 0 评论 -
JVM的内存区域划分(面试问题:你了解java内存模型么)
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: &...转载 2020-03-01 15:59:08 · 113 阅读 · 0 评论 -
什么是Native方法
https://www.jianshu.com/p/22517a150fe5原创 2020-03-01 15:37:03 · 403 阅读 · 0 评论 -
ConcurrentHashMap(锁分段技术) 线程不安全的HashMap
ConcurrentHashMap(锁分段技术) 线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 效率低下的HashTable容器 HashTa...原创 2020-02-25 09:31:41 · 402 阅读 · 0 评论 -
线程Thread类的start()方法和run()方法
一、初识java的线程是通过java.lang.Thread类来实现的。VM启动时会有一个由主方法所定义的线程。可以通过创建Thread的实例来创建新的线程。每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。 ...原创 2020-02-24 20:44:19 · 4490 阅读 · 2 评论 -
jsp静态include和动态include区别
JSP中,include是一个经常用到的标签。当应用程序中所有的页面的某些部分(如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。但是相同的部分有静态的(装载进页面显示后再也不变的),有动态的(装载进页面后还会改变,如:随时间改变、...转载 2020-02-24 08:58:42 · 485 阅读 · 0 评论 -
Servlet 生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:Servlet 通过调用 init () 方法进行初始化。Servlet 调用 service() 方法来处理客户端的请求。Servlet 通过调用 destroy() 方法终止(结束)。最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。现在让我们详细讨论生命周期的方法。...原创 2020-02-23 09:56:04 · 73 阅读 · 0 评论 -
try中有return,finally中的code会不会执行,执行是在return前还是后?
注:1.当finally中没有return,但是try中有return时,执行顺序是try--finally--return,但是finally中不会修改在try中的值,在try中的值会保存到函数栈中,继续执行finally,执行完后,再从栈中取出返回;代码如下public class FinallyTest { public static void main(String[] args...原创 2020-02-22 10:02:31 · 163 阅读 · 0 评论 -
mysql为什么用B+树,innodb和myisam的区别?
Mysql索引的本质 Mysql索...原创 2020-02-21 23:25:35 · 921 阅读 · 0 评论 -
JVM系列(四):浅谈常用四种垃圾回收算法总结!
常用四种垃圾回收算法常用的垃圾回收算法有四种:标记-清除算法、复制算法、标记-整理算法、分代收集算法。1.标记-清除算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,标记完成后统一回收所有被标记的对象,如下图。缺点:标记和清除两个过程效率都不高;标记清除之后会产生大量不连续的内存碎片。image2.复制算法把内存分为大小相等的两块,每次存储只用其中一块,当这一块用...原创 2020-02-21 20:32:18 · 195 阅读 · 0 评论