
面试专题
充分备战金三银四,金九银十
硅脂味咖啡
理想的生活,就是生活的理想!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试题:写两个线程,一个线程打印1~26,另一个线程打印字母A-Z,交替打印数字和字母
参考代码public class SpringbootApplication { static class PrintRunnable implements Runnable { //定义一个锁 private Object lock; public PrintRunnable(Object lock) { th...原创 2020-04-11 20:17:53 · 7467 阅读 · 8 评论 -
面试官:能详述一下数据库事务隔离的四个级别?
事务隔离级别特点Read Uncommitted(读未提交)事务可以看到和读取到其他未提交事务的执行结果,这样一个事务读取到另一个事务还有没提交的记录,就很可能造成脏读。Read Committed(读已提交)事务只能看见已经提交的事务所做的改变,但是这种隔离级别可能会导致不可重复读,因为同一事务的其他实例在该实例处理其间可能会有新的 commit,所以同一个查询操作...原创 2020-04-09 21:57:00 · 654 阅读 · 0 评论 -
面试官:你了解哪些类型的索引?说说特点?
索引类型特点普通索引使用表中的普通列构建出来的索引,没有任何限制唯一索引唯一索引列的值必须唯一,不过允许存在空值。如果索引是组合索引,那么列值的组合也必须是唯一的主键索引根据主键建立的索引,它是一种特殊的唯一索引,,不过相比起唯一索引,主键索引不允许重复组合索引一个索引包含多个列,又叫做联合索引。这多个列中的值不允许有空值全文索引通过建立倒排索...原创 2020-04-09 21:55:18 · 486 阅读 · 0 评论 -
面试官:Synchronized用过么?原理是什么?
相信经过这篇专栏前面几篇的铺垫,读者即使在项目中没用过Synchronized关键字,对它的了解也不亚于项目实战了,而且大多数人也都是浮于使用,只是知道用Synchronized关键字能实现同步,那就用呗,甚至连类锁和对象锁也没分开区别,当然了,会用总是好的,不过面试官可不会只问你用过Synchronized没,只要你用过就肯定会深究的,所以这时能说出其一二原理,自然是大大的好。Synchro...原创 2020-04-07 21:07:03 · 1812 阅读 · 0 评论 -
面试官:了解锁消除和锁粗化么?
锁消除虚拟机的即时编译器在运行时,会对一些代码上要求是同步的,但被检测到其实不可能存在共享数据竞争的锁进行消除,主要是依据逃逸分析。锁粗化原则上,锁的粒度要尽量小,因为这样可以提高并发度,但是假如一系列的连环操作都是对同一个对象反复加锁,解锁,比如把锁加载在循环体里,单次同步操作的时间也许很短,但是高频反复的锁请求、同步和释放,也会对系统资源造成一定消耗,可能还不如加一把大锁。而锁粗...原创 2020-04-07 21:06:12 · 737 阅读 · 0 评论 -
面试官:如果让你优化一下锁,会从哪些方面考虑?
如果是数据库的锁,在同一个库中,因此行锁还是大家一起共享的,那么采用主从库,做读写分离,从库做读操作,基本不用加锁,主库做写操作,使用innodb引擎,使用行锁增大写并发,这样在读数据时,就无需再等待锁被释放了,不过在主库修改完数据后,要主从同步,以免读到脏数据。使用分段加锁,这可以参考下ConcurrentHashMap,减小锁粒度,增大并发,不过不要将锁的粒度太过细化,不然可能会出现线程的...原创 2020-04-07 21:05:20 · 253 阅读 · 0 评论 -
面试官:慢日志那么多,怎么找到最想优化的sql?
这里就需要了解一下Mysql提供的日志分析工具mysqldumpslow输入帮助命令了解下mysqldumpslow的参数:mysqldumpslow --help参数说明s表示按照何种方式排序c访问次数I锁定时间r返回记录t查询时间al平均锁定时间ar平均返回记录数at平均查询时间t返回前面多少条数据...原创 2020-04-05 20:18:28 · 371 阅读 · 0 评论 -
面试官:Mysql怎么启动慢日志?
先查看下慢日志是否被开启show variables like '%slow_query_log';Mysql默认是OFF,关闭。开启慢日志set global slow_query_log=1;可以看到慢日志已经被开启了慢日志是记录慢的sql,那具体什么才算是慢的sql,这要根据自己的业务来定,先看看默认的慢查询时间 show variables like '%...原创 2020-04-05 19:55:24 · 337 阅读 · 0 评论 -
面试官:用exists代替in真的好么?
在面试谈到sql优化的一些经验时,有些面试者会回答:写sql时,最好用exists来代替in,因为in不走索引,所以用exists的sql性能较好,那真的是这样么?以下用AB两表,做个示例,两表都有一个id字段,而两个表都为id字段建立了索引in的作用其实就是把范围内存在的数据做个返回,先看看下图的简单示例sql:select * from A where id in (select i...原创 2020-04-05 18:59:32 · 1131 阅读 · 0 评论 -
MySQL数据库作为系统的存储,一天五万条以上的增量, 预计运维三年,怎么优化?
设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率。选择合适的表字段数据类型和存储引擎,适当的添加索引。MySQL分出主从库,做读写分离。通过一定得规律做分表,以此来减少单表中的数据量,提高查询速度。添加缓存中间件,减轻数据库访问压力。对那些不经常改动的页面,可以生成静态页面。尽量写出好的和高效的SQL。...原创 2020-04-03 21:51:38 · 1070 阅读 · 0 评论 -
MySQL面试突击(五)
MySQL支持事务吗?答:MySQL默认情况下是自动提交的,不支持事务,但是如果存储引擎采用的是InnoDB或者BDB,就可以使用SET AUTOCOMMIT=0关闭自动提交,然后通过COMMIT来手动提交修改,或者是ROLLBACK来回滚更改。NULL是什么意思?答:Null表示这个字段值未知,尚未存储数据库字段值,它不表示“ ”(空字符串),无法将Null与值进行比较,使用IS ...原创 2020-04-03 21:51:13 · 297 阅读 · 0 评论 -
MySQL面试突击(四)
什么是非标准字符串类型?答:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT。列的字符串类型可以是什么?答:SET,BLOB,ENUM,CHAR,TEXT,VARCHAR如何在Unix和Mysql时间戳之间进行转换?答:从Unix时间戳转换为Mysql时间戳的命令是FROM_UNIXTIME,从Mysql时间戳转换为Unix时间戳的命令是UNIX_TIMES...原创 2020-04-03 21:50:44 · 318 阅读 · 0 评论 -
MySQL面试突击(三)
说说MySQL数据库中MyISAM类型表的特点?答:一个MYISAM类型的表中有三个文件,分别是索引文件、表结构文件、数据文件MYISAM类型的表,不支持事务,但是每次查询都是原子操作支持表级锁,每次操作都是对整个表加锁会存储表的总行数采用的是非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。说说MySQL数据库中InnoD...原创 2020-04-03 00:00:17 · 349 阅读 · 0 评论 -
MySQL面试突击(二)
说说MySQL中有哪几种锁?答:表级锁,行级锁,页级锁说说表级锁的特点?答:开销小,加锁快,不会出现死锁,但是一锁就是锁整个表,所以锁定粒度大,会发生锁冲突的概率最高,并发度是最低的。说说行级锁的特点?答:开销大,加锁慢,会出现死锁,锁的是表中的行,锁定粒度最小,发生锁冲突的概率最低,所以并发度也是最高的。说说页面锁的特点?答:开销和加锁时间介于表锁和行锁之间,也会出...原创 2020-04-02 23:59:51 · 836 阅读 · 0 评论 -
面试官:说说对SQL语句优化有哪些方法
用EXISTS替代IN、用NOT EXISTS替代NOT IN避免在索引列上使用计算,因为这样会导致索引失效避免在索引列上使用 IS NULL 和 IS NOT NULL对查询进行优化,应尽量避免全表扫描,首先可以考虑在where和order by涉及的列上建立索引尽量避免在where的子句中对字段进行null值判断,否则引擎就会放弃使用索引,从而进行全表扫描尽量避免在where子句中...原创 2020-04-01 20:28:30 · 930 阅读 · 0 评论 -
面试官:说说你设计索引的原则
设计索引的列最好是where字句中的列或者连接字句中指定的列,而不是那些被搜索出来,要作为结果的列为那些经常需要排序,分组以及联合操作的列建立索引使用唯一索引,不过只有当列的重复值越少,索引的效果才越好,所以如果列值都是惟一的,那效果就是最好的,反例就是为性别这个字段建立索引,性别只有男和女,建立了索引也加快不了多少速度,因为不管搜索哪个值,大约都会得到一半的行当要建立索引的...原创 2020-03-31 19:24:27 · 420 阅读 · 0 评论 -
Docker面试题(一)
说说什么是Docker?答:Docker是一个容器化平台,它以容器的形式将应用程序及其所有的依赖项打包在一起,确保应用程序在任何环境中无缝运行。什么是Docker镜像?答:Docker镜像是Docker容器的源代码,Docker镜像用来创建容器,它就像java中的类。什么是Docker容器?答:Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,在主机操作系统的...原创 2020-03-27 10:17:13 · 3382 阅读 · 2 评论 -
MySQL面试题(一)
说说数据库的三范式?答:第一范式:数据库表的每一列都是不可分割的原子数据项。第二范式:非主键列完全依赖于主键,而不能只是依赖于主键的一部分。第三范式:非主键列只依赖于主键,不依赖于其他非主键。如何获取当前数据库的版本?答:使用select version()来获取当前Mysql数据库的版本。了解事务么?答:事务是由一步或几步数据库操作序列组成的逻辑执行单元,这系列操作要...原创 2020-03-13 17:49:42 · 402 阅读 · 0 评论 -
RabbitMQ面试题(四)
RabbitMQ中的broker 是指什么?cluster 又是指什么?答:broker是指一个或多个erlang node的逻辑分组,且node上运行着RabbitMQ应用程序。cluster是在broker的基础之上,增加了node之间共享元数据的约束。什么是元数据?元数据分为哪些类型?包括哪些内容?与cluster相关的元数据有哪些?元数据是如何保存的?元数据在cluster中是如何分...原创 2020-03-13 17:49:06 · 727 阅读 · 0 评论 -
RabbitMQ面试题(三)
什么是消息持久化?答:把消息保存到物理介质上,防止消息的丢失,就是消息的持久化。RabbitMQ消息的持久化有几种?答:RabbitMQ的持久化分为:交换机的持久化、队列的持久化和消息的持久化。RabbitMQ默认使用哪种交换机?答:Direct交换机。RabbitMQ接收到消息之后就必须被消费么?答:不是必须的,在消息确认消费之前,可以拒绝消息消费,通过channe...原创 2020-03-12 18:04:53 · 325 阅读 · 0 评论 -
RabbitMQ面试题(二)
说说RabbitMQ有哪些重要的组件?答:ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,在程序代码中使用。Channel(信道):用于推送消息的通道。Exchange(交换机):用于接受消息,然后根据路由匹配分配消息到具体的Queue。Queue(队列):生产者的消息存储在队列这,消费者从队列这拿消息消费。RoutingKey(路由键...原创 2020-03-12 18:04:27 · 320 阅读 · 0 评论 -
RabbitMQ面试题(一)
什么是RabbitMQ?答:RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件),生产者把消息发送到消息队列,消费者去消息队列中取消息消费,实现了服务之间的高度解耦。使用RabbitMQ有什么好处?答:异步,解耦,削峰填谷使用RabbitMQ有什么缺点?答:降低了系统的稳定性,下游系统都去消息队列里拿消息消费,要是消息队列服务宕机,那...原创 2020-03-11 18:00:59 · 996 阅读 · 0 评论 -
MyBatis面试题(三)
说说对ORM的理解?答:ORM就是所谓的对象关系映射,通过这门技术,可以让程序中的实体对象和数据库的记录做到互相映射,对象可以借此持久化到数据库记录,数据库记录也能借此转化为实体对象。为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?答:Hibernate就属于全自动ORM映射工具,因为使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接...原创 2020-03-10 18:32:27 · 209 阅读 · 0 评论 -
MyBatis面试题(二)
说说什么是MyBatis的接口绑定?答:在MyBatis项目中定义任意的接口,并将接口里面的方法和sql语句进行绑定,这样可以直接通过接口方法来调用相应的sql语句,这就是接口绑定。MyBatis的接口绑定有哪些实现方式?答:一种是通过注解来绑定,在接口的方法上加上@Select、@Update这些注解,注解里面的参数就是要运行的sql语句。另外一种就是直接在xml文件里写sql,通...原创 2020-03-10 18:31:51 · 290 阅读 · 0 评论 -
MyBatis面试题(一)
说说什么是Mybatis?答:Mybatis为开发者封装了JDBC的加载驱动,建立连接,创建statement对象,关闭连接等复杂操作,开发者只需编写与业务相关的sql语句,而且sql由自己编写,灵活性高,开发者对sql的掌控度也更强(不喜欢用JPA)。Mybatis可以使用注解或者是xml文件来配置和映射原生信息,能够把Java对象映射成数据库记录,相比起JDBC的手动设置参数以及还得...原创 2020-03-08 17:34:33 · 947 阅读 · 1 评论 -
Spring面试题(五)
说说什么是Spring AOP?答: AOP即面向切面编程,是对OOP(面向对象)的一种补充。通过AOP的思想,把无关业务逻辑的功能抽离出来,实现业务代码和业务外代码的解耦,功能的复用和代码的轻量无污染,OOP的基本单元是类,而AOP的基本单元是切面。什么是切面(Aspect)?答:运用了AOP思想,把什么功能抽离出来,这个功能就是切面,比如日志功能,事务管理都是切面。如果用代码来简...原创 2020-03-07 18:20:54 · 243 阅读 · 0 评论 -
Spring面试题(四)
说说IOC中的继承和Java继承的区别?答:IOC中的继承体现的是一种实例间的关系,而Java继承则是类与类之间的关系。所以IOC中的继承子bean和父bean允许是不同类型的,而Java继承中,子类其实是一种特殊的父类。最后可以得出Java中的继承可以又多态性,而IOC中的继承则不行。IOC容器自动完成装载,默认的方式是什么?答:默认是byType的方式。说说@Compone...原创 2020-03-07 16:14:29 · 319 阅读 · 0 评论 -
Spring面试题(三)
说说Spring有哪些模块?答:Spring Core:该模块提供了核心类库,提供了IOC服务。Spring AOP:该模块提供了AOP功能,面向切面编程。Spring Context:该模块提供框架式的Bean访问方式,其他程序可以通过Context访问Spring的Bean资源。Spring DAO:该模块提供了JDBC的抽象,简化了数据访问异常的处理。Spring ORM:该...原创 2020-03-07 14:27:54 · 320 阅读 · 0 评论 -
Spring面试题(二)
说说Spring IOC的实现原理?答:工厂模式加上反射就是Spring IOC的实现原理。Spring应用程序有哪些不同组件?答:接口 - 定义功能Bean类 - 它包含属性,setter和getter方法,函数等Spring面向切面编程(AOP) - 提供面向切面编程的功能Bean配置文件 - 包含类的信息以及如何配置它们用户程序 - 使用接口什么是Spring的...原创 2020-03-06 17:58:12 · 466 阅读 · 0 评论 -
Spring面试题(一)
说说什么是Spring?答:Spring是一个开源框架,目的是为了简化企业级应用的开发,让开发者只需关心业务需求就好,Spring是一个IOC和AOP容器框架。说说Spring的优点?答:Spring对代码的污染低,属于低侵入式设计。Spring提供了IOC技术,由IOC容器来管理对象的生命周期和对象间的关系,降低了对象之间的耦合度。Spring提供了AOP技术,以面向切面编程的思想...原创 2020-03-06 17:57:41 · 541 阅读 · 0 评论 -
java并发面试题(八)
说说isInterrupted()方法和interrupted()方法?答:可参考本篇博客【isInterrupted()方法和interrupted()方法简析】。你是如何调用wait()方法的?使用if块还是循环?为什么?答:wait()方法应该在循环调用,因为当线程获取到CPU开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。在线程中你怎么...原创 2020-02-28 18:31:42 · 255 阅读 · 0 评论 -
Redis面试题(八)
什么是缓存雪崩?答:当缓存服务器重启或者大量的缓存集中在某一个时间段内失效,大量的请求就会直接怼到数据库,对后端系统造成极大的压力,很可能导致系统崩溃。缓存雪崩的解决方案?答:在给key设置失效时间时加上一个随机值,这样不会让大量的key在同一时间失效,产生雪崩效应。通过加锁或者队列来控制访问线程数。使用Redis主从备份,保证缓存系统的高可用。Redis的使用场景?答...原创 2020-03-05 18:16:18 · 302 阅读 · 0 评论 -
Redis面试题(七)
Redis常见性能问题和解决方案?答:Master最好不要写内存快照,如果Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务。如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次。为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网。尽量避免在压力大的主库上...原创 2020-03-05 18:15:31 · 392 阅读 · 0 评论 -
Redis面试题(六)
Redis如何做大量数据插入?答:从Redis2.6开始,redis-cli支持一种新的被称之为pipe mode的新模式,来用于执行大量数据插入的工作。说说Redis的Pipeline是什么?答:Pipeline就是管道的意思。而管道本身是能够承载流式数据的一个长链路,能够对做到对事件的缓冲效果。为什么需要Redis的Pipeline?答:首先要了解Redis的工作过程是基...原创 2020-03-05 18:15:09 · 545 阅读 · 0 评论 -
Redis面试题(五)
Redis集群方案应该怎么做?都有哪些方案?答:twemproxy,大概概念是,它类似于一个代理方式,使用方法和普通redis无任何区别,设置好它下属的多个redis实例后,使用时在本需要连接redis的地方改为连接twemproxy,它会以一个代理的身份接收请求并使用一致性hash算法,将请求转接到具体redis,将结果再返回twemproxy。使用方式简便(相对redis只需修改连接端口...原创 2020-03-05 18:14:44 · 360 阅读 · 0 评论 -
Redis面试题(四)
Redis和Redisson有什么关系?答:Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象如Bloom filter,BitSet。Redis的内存用完了会发生什么?答:如果设置给Redis的内存用完了,那么写命令就会返回错误信息,不过读命令还是可以正常运行的。不过我们如果设置了淘汰策略,内存达到上限的话,就会按照配置的淘汰...原创 2020-03-04 18:15:31 · 303 阅读 · 0 评论 -
Redis面试题(三)
说说Redis的事务?答:事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行,事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务还是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。Redis事务相关的命令有哪几个?答:MULTI、EXEC、DISCARD、WATCHRedis如何设置密码及验证密码?答:用【config set req...原创 2020-03-03 18:30:47 · 306 阅读 · 0 评论 -
Redis面试题(二)
Redis与Memcached相比有哪些优势?答:Memcached数据类型只支持简单的字符串,而Redis的数据类型就丰富的多Redis速度比Memcached快Redis可以持久化数据Memcached与Redis的区别都有哪些?答:首先是存储方式的不同,Memcached的数据是全部存在内存的,断电后就会挂掉,数据也不能超过内存大小。而Redis是支持持久化的,部分数据可...原创 2020-03-03 18:30:24 · 356 阅读 · 0 评论 -
Redis面试题(一)
Redis是什么?答:Redis是一个使用C语言开发的,完全开源免费的,遵守BSD协议的一个高性能key-value数据库。什么是BSD协议?答:BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。说说Redis读写速率是多少?答: Redis读的速度是110000次/s,写的速度是81000次/s 。...原创 2020-03-03 11:27:00 · 1672 阅读 · 0 评论 -
java并发面试题(十二)
说说什么是公平锁?答:公平锁可以保证线程按照先来后到的顺序去获取锁资源,不会出现抢占现象。说说什么是非公平锁?答:非公平锁无法保证线程按照先来后到的顺序去获取锁资源,很可能后来的线程先得到锁资源。Java中Semaphore是什么?答:Java中的Semaphore是一种新的同步类,它是一个计数信号。Semaphore有什么作用?答:Semaphore就是一个信号量,...原创 2020-03-02 17:52:09 · 213 阅读 · 0 评论