面试整理
文章平均质量分 68
我爱写bug77
这个作者很懒,什么都没留下…
展开
-
面试之-分布式锁-01
分布式锁面试真的非常之常见;这里整理下一些常见的问题或者心得;分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:互斥性。在任意时刻,只有一个客户端能持有锁。不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。解铃还原创 2021-06-17 15:03:23 · 635 阅读 · 0 评论 -
面试之-redis-01-并发安全问题-lua脚本
我们正常理解的线程安全问题是指单进程多线程模型内部多个线程操作进程内共享内存导致的数据资源充突。而 Redis 的线程安全问题的产生,并不是来自于 Redis 服务器内部。因为redis是单线程的,本身并没有线程安全问题;Redis 作为数据服务器,就相当于多个客户端的共享内存,多个客户端就相当于同一进程下的多个线程,如果多个客户端之间没有良好的数据同步策略,就会产生类似线程安全的问题。典型场景是: Redis 内存储了一个用户的状态:user5277=idle; ...原创 2021-06-16 20:15:36 · 1384 阅读 · 1 评论 -
面试必问的数据库-3.3:索引
整理和记录数据库索引的一些面试题:1:联合索引1.1:mysql建了两个联合索引分别是(a,b)和(b,a),在查询语句select a,b from table where a=x and b=x时,走的是哪一条索引?为什么?一般在设计时候,是不会设计这种索引的,这个题面试考虑的是对索引的建立和底层优化的一些知识;走哪个索引得MySQL的成本分析器来决定,基本上就是看a和b的区分度,可以用explain format=json去看详细的查询成本统计结果。底层都是依赖优化器的分析.原创 2021-04-20 19:19:31 · 97 阅读 · 0 评论 -
面试必问的分布式事务:1.1-概念以及解决方案
首先说说数据库事务的一些特性1:数据库事务1.1事务的几个特性事务提供了一种机制,可用来将一系列数据库更改归入一个逻辑操作。更改数据库后,所做的更改可以作为一个单元进行提交或取消。事务可确保遵循原子性、一致性、隔离性和持续性(ACID)这几种属性,以使数据能够正确地提交到数据库中。1)原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作 要么都发生,要么都不发生。2)一致性:一个事务中,事务前后数据的完整性必须保持一致。3)隔离...原创 2020-08-04 16:47:44 · 353 阅读 · 0 评论 -
mybatis 面试:一级缓存和二级缓存
前言mybatis 现在是面试必问的,其中最主要的除了一些启动流程,基础语法,那么就是缓存问题了,在面试中也是常问的问题之一;大家都知道mybatis是有二级缓存的,其中一级缓存默认是开启的,二级缓存是要手动配置开启的,但是本人这里不建议在实际生产中用mybatis的缓存,还是建议在外部实现自己的缓存,如使用redis等;一级缓存1:一级缓存是默认开启的;2:底层其实是基于hashm...原创 2020-02-20 17:14:45 · 11173 阅读 · 1 评论 -
面试必问的http-1.3:http1.0-http1.1-http1.2区别
Http1.1由于HTTP 1自身的局限性,它不能很好的为用户提供性能良好的WEB服务。于1999年6月正式发布了HTTP1.1标准REC2616,它厘清了之前版本中很多有歧义的地方,而且还新增了很多重要的优化,如持久连接、分块编码传输、状态码扩充、增强的缓存机制、传输编码及请求管道等。1.持久连接每个TCP连接在建立初期都需要进行三次握手,需要经历一次客户端与服务器间的完整往返,...转载 2019-04-29 11:15:36 · 3156 阅读 · 1 评论 -
面试必问的http-1.2:问题整理
TCP-UDP区别:TCP,提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的的运输服务,但是正因为这样,不可避免的增加了许多的开销,比如确认,流量控制等。对应的应用层的协议主要有 SMTP,TELNET,HTTP,FTP 等。UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。虽然UDP不提供可靠交付,但...原创 2019-04-29 09:22:53 · 676 阅读 · 0 评论 -
面试必问的http-1.1:三次握手-四次挥手
1:http为什么是不安全的? 1:不能这么问, 首先http协议本身不存在安全问题,并且协议本身也几乎不会成为攻击的对象。 所谓的http不安全, 是指应用http协议的服务器和客户端,以及运行在服务器上的web应用资源容易受到攻击, 这些是不安全的。 2:因为http协议非常单纯,它不具备会话管理...原创 2019-04-28 15:43:27 · 1156 阅读 · 0 评论 -
面试必问的http-1.0:OSI 和 TCP/IP协议划分
OSI 7层协议:至于具体ICP/IP是4层,还是5层,可能有些人的分法不一样,这不是重点。其实叫法可能不一样,但内容是一样的。...原创 2019-04-28 15:21:39 · 152 阅读 · 0 评论 -
面试必问的http-1.4:https
HTTP与HTTPS有什么区别?HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协...原创 2019-04-29 14:32:22 · 267 阅读 · 0 评论 -
关于【缓存穿透、缓存击穿、缓存雪崩、热点数据失效】解决方案
在我们的平常的项目中多多少少都会使用到缓存,因为一些数据我们没有必要每次查询的时候都去查询到数据库。特别是高 QPS 的系统,每次都去查询数据库,对于你的数据库来说将是灾难。今天我们不牵涉多级缓存的知识,就把系统使用到的缓存方案,不管是一级还是多级的都统称为缓存,主要是为了讲述使用缓存的时候可能会遇到的一些问题以及一些解决办法。我们使用缓存时,我们的业务系统大概的调用流程如下图:...转载 2019-04-25 11:47:56 · 142 阅读 · 0 评论 -
面试必问的数据库-4.1:表--建表方面,你可以考虑下,你项目是用三范式还是反范式,理由是什么?
有时候在面试的时候,有的面试官可能就问你数据库方面的一些知识。有没有独立做过项目啊,那你是怎么设计数据库的呢?这里就不得不面对一个问题:建表方面,你可以考虑下,你项目是用三范式还是反范式,理由是什么?官方的描述:1NF:无重复的列.表中的每一列都是不可分割的基本数据项.2NF:属性完全依赖于主键.3NF:属性不传递依赖于其它非主属性.非主...原创 2019-04-30 14:53:41 · 1593 阅读 · 0 评论 -
面试必问的集合-1.1:Set、List
ArrayList 排序ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减。java中实现对list的自定义排序主要通过两种方式1)让需要进行排序的对象的类实现Comparable接口,重写compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用Collections...原创 2019-05-06 10:33:37 · 215 阅读 · 0 评论 -
面试必问的集合-1.2:集合常见操作
1:集合遍历,要删除其中一个元素要想在集合遍历的过程中删除指定元素,就务必使用迭代器自身的remove方法;可以使用 Iterator 本身的方法 remove() 来删除对象,这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法。2:ArrayList排序java中实现对list的自定义排序主要通过两种方式1)让需要进行排序的对象的类实现...原创 2019-05-06 10:50:25 · 252 阅读 · 0 评论 -
面试专用:各种MQ的区别
一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬https://www.cnblogs.com/xiapu5150/p/9927323.htmlKafka、ActiveMQ、RabbitMQ、RocketMQ 区别以及高可用原理http://www.sohu.com/a/289890927_120045139Mq面试题:https://github.com/...原创 2019-09-02 16:03:08 · 428 阅读 · 0 评论 -
面试必问的HashMap-2.1:CurrentHashMap
ConcurrentHashMap与HashMap等的区别1.HashMapHashMap是线程不安全的,在多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。2.HashTableHashTable和HashMap的实现原理几乎一样,差别无非是HashTable不允许key和value为null...转载 2019-03-13 16:46:16 · 5270 阅读 · 0 评论 -
面试必问的HashMap-1.1:HashMap几个关键点分析
HashMap都不算什么特别的,这里整理下我的理解。分析HashMap就不得不说下数据结构,首先Java中有几种数据结构:数组、链表、树数组的话:查询效率高链表新增效率高。牛逼的是,我们的HashMap的数据接口就比较吊了,他会把数组和链表的优势结合起来。数组:int[] aa 这就是一个数组链表:单向链表,其实就主要是存了一个数据和指向下...原创 2019-03-13 14:20:43 · 176 阅读 · 0 评论 -
面试必问的多线程-1.1:线程
1:名词解释volatilevolatile关键字的作用是:保证变量的可见性。注意插播一条:原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。不过这里有一点需要注意:在32位平台下,对64位数据的读取和赋值是需要通过两个操作来完成的,不能保证其原子性。但是好像在最新的JDK中,JVM已经保证对64位数据的读取和赋值也是原子性操作了。1...原创 2019-02-21 17:51:36 · 249 阅读 · 0 评论 -
面试必问的多线程-1.2:线程-用Java实现死锁
死锁是面试必不可缺的知识点,上节说的线程中已经很明确的说明了死锁的解决方案。 那么什么时候会有多线程问题?1: 多线程的环境下2: 必须有共享资源3: 对资源进行非原子性操作 用Java怎么重现死锁呢? 例子:有N个资源和N个线程,并且你需要所有的资源来完成一个操作。为了简单这里的n可以替换为2,越大的数据会使问题看起来更复杂。通过避免Ja...原创 2019-02-22 15:12:59 · 187 阅读 · 0 评论 -
面试必问的事务-2.1:Spring事务
简介:事物是一系列的动作,他们被当做一个独立的工作单元。要么全部完成,要么全部不起作用。1:事物的四个关联属性(ACID):1:原子性(atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。2:一致性(consistency):一旦所有事务动作完成,事务就被提交。数据和资源就处于一种满足业务规则的一致性状态中。3...原创 2019-02-13 14:56:20 · 214 阅读 · 0 评论 -
面试必问的事务-1.1:数据库事务
首先说明一下数据库事务和spring事务的区别和联系?其实这两个基本上是同一个东西。spring的事务是对数据库事务的封装,最后本质的实现还是在数据库。假如数据库不支持事务的话,spring的事务是没有作用的。 如果一个数据库声称支持事务操作,那么该数据库必须要具备以下四个特性:⑴ 原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,事务...原创 2019-02-13 17:30:20 · 297 阅读 · 0 评论 -
面试必问的数据库-2.1:锁机制1
数据库锁机制:数据库并发需要使用事务来控制,事务并发问题需要数据库锁来控制,所以数据库锁是跟并发控制和事务联系在一起的。平时会经常看到或者听到数据库锁有“共享锁”,“排它锁”,“互斥锁”,“写锁”,“读锁”,“悲观锁”,“乐观锁”,“行级锁”,“表级锁”,“页级锁”等,同时我们还会常看到“丢失修改“,”不可重复读“,”读脏数据“这三个术语,他们究竟是什么关系以及怎么理解呢,下面就来介绍...原创 2019-02-19 14:10:03 · 1333 阅读 · 0 评论 -
面试必问的事务-2.2:事务嵌套
通过分析一些事务嵌套的场景,来深入理解spring的事务传播机制。1:简单举例分析假设外层事务 Service A 的 Method A() 调用 内层Service B 的 Method B()PROPAGATION_REQUIRED(spring 默认) required (需要)如果ServiceB.methodB() 的事务级别定义为 PROPAGATION_REQUIR...原创 2019-02-14 11:11:05 · 5731 阅读 · 0 评论 -
面试必问的事务-2.3:事务回滚
上文说完了事务嵌套,那这里也不得不说下事务回滚是怎么回事。spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作。1:首先说明一下异常是什么,有什么区分,以及常见的异常?Java里面异常分为两大类:checkedexception(检查异常)和unchecked exception(未检查异常-也叫运行时异常RuntimeException...原创 2019-02-14 14:52:29 · 543 阅读 · 0 评论 -
面试必问的事务-2.4:spring编程式事务和声明式事务优缺点
spring两种事物,编程式事务和声明式事务编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提...原创 2019-02-14 14:56:41 · 3777 阅读 · 0 评论 -
面试必问的多线程-1.3:lock和synchronized底层上有什么区别呢?
1)Lock不是Java语言内置的,synchronized是Java语言的关键字,因此是内置特性。Lock是一个类,通过这个类可以实现同步访问;2)Lock和synchronized有一点非常大的不同,采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用;而Lock则必须要用...原创 2019-02-26 14:16:52 · 1263 阅读 · 1 评论 -
面试必问的多线程-1.4:各种锁介绍
认识的锁?偏向锁轻量级锁重量级锁重入锁自旋锁共享锁独占锁\排它锁读写锁公平锁非公平锁死锁活锁1:偏向锁是Java6引入的一项多线程优化,它会偏向于第一个访问锁的线程,如果在运行过程中,同步锁只有一个线程访问,不存在多线程争用的情况,则线程是不需要触发同步的,这种情况下,就会给线程加一个偏向锁。如果在运行过程中,遇到了其他线程抢占锁,则...原创 2019-02-26 14:47:05 · 226 阅读 · 0 评论 -
面试必问的数据库-4.1:sql-优化
1:关于批量插入数据(100万)数据优化思路:1:变多次提交为一次2:使用批量操作整理了两种方法:方法一: 1. publicstaticvoidinsert(){ 2. //开时时间 3. Longbegin=newDate().getTime(); 4. //sql前缀 5. ...原创 2019-03-08 16:11:15 · 272 阅读 · 0 评论 -
面试必问的Java-1.0:动态代理-静态代理
Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题。代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对...原创 2019-02-27 10:54:18 · 380 阅读 · 0 评论 -
面试必问的数据库-3.1:索引-底层实现原理
索引可以加快查询的效率。如果数据库没有加索引,sql中where是怎么执行查找到目标的?举例:如果想要查询表格第二列是怎么查找的?如想查询where col2=22的记录,在没有加索引的情况下是按顺序从第一条记录开始查找,因此需要查找5次才能找到22。如果对col2列家伙是哪个索引之后,假设用最简单的二叉树作为索引存储的方式,再次查找where col2=22的...原创 2019-03-06 17:38:55 · 1574 阅读 · 1 评论 -
面试必问的数据库-3.2:索引-相关
1:数据库索引和选择性的关系在讨论数据库索引的时候,经常会提到“选择性”(selectivity)这个概念。“选择性”是描述列值数据分布情况的一个重要属性。“选择性”和“基数”(cardinality)是两个密不可分的概念。“基数”就是一列中唯一值的数量,对于有唯一约束的列,“基数”等于表的总行数。怎么计算索引的选择性?选择性 = 基数/总行数 * 100%选择性是什么意思...原创 2019-03-07 17:15:11 · 411 阅读 · 0 评论 -
面试必问的事务-2.5:JDK动态代理给Spring事务埋下的坑!
有时候我们会遇到这样一种问题:service本类中方法调用另一个方法事务不生效问题,但是我们已经在每个方法上都加了事务控制,为什么还是不生效呢?这里就有一个点比较重要了,service本类方法中调用另外一个方法。 serviceImpl1{ public A(){ //给A加事务 B(); //A调用B } public B(){ }...原创 2019-02-14 16:46:48 · 503 阅读 · 1 评论