├── Mysql相关.md ├── README.md ├── java基础.md ├── java并发.md ├── java集合.md ├── kafka专题.md ├── netty网络编程.md ├── spring相关.md ├── 分布式相关.md ├── 微服务.md ├── 缓存相关.md └── 视频整理 └── java高级开发群分享视频.txt /Mysql相关.md: -------------------------------------------------------------------------------- 1 | ### mysql分页有什么优化 2 | 1. https://blog.csdn.net/a724888/article/details/60879572 3 | 2. 分页一般有两个查询:①获取总记录数 ②获取数据 ;如果业务没有明确需求,尽量不要 4 | 获取总记录数 5 | 3. 其实考察的就是索引:对于我们常见的根据条件查询列表,要对查询条件的column 6 | 建立索引 7 | ### 悲观锁、乐观锁 8 | - 参考:https://tech.meituan.com/innodb-lock.html 9 | 1. 在悲观锁的情况下,为了保证事务的隔离性,就需要一致性锁定读。 10 | 读取数据时给加锁,其它事务无法修改这些数据。修改删除数据时也要加锁,其它事务无法读取这些数据。 11 | 2. 乐观锁,大多是基于数据版本( Version )记录机制实现 MVCC 12 | ### 组合索引,最左原则 13 | 1. 14 | 2. 15 | ### mysql 的表锁、行锁 16 | 1. 表锁是对一整张表加锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做ddl处理时使用。 17 | 2. 行锁则是锁住数据行,这种加锁方法比较复杂,但是由于只锁住有限的数据,对于其它数据不加限制,所以并发能力强,MySQL一般都是用行锁来处理并发事务 18 | ### mysql 性能优化 19 | - http://mp.weixin.qq.com/s/Yjh_fPgrjuhhOZyVtRQ-SA 20 | 1. 记住上边那些军规 21 | 2. 索引 22 | ### mysql的索引分类:B+,hash;什么情况用什么索引 23 | - 还是那句话,一定要说明在哪种存储引擎下,对我们当然是Innodb 24 | 1. P160 25 | 2. 26 | ### 事务的特性和隔离级别 27 | - 参考:https://tech.meituan.com/innodb-lock.html 28 | 1. 事务特性 ACID 即 原子性 一致性 隔离性 持久性 29 | 2. 隔离级别 READ_UNCOMMITTED READ_COMMITTED REPEATABLE_READ SERIALIZABLE 30 | 3. 参考上边的链接,理解每个隔离级别的具体使用 31 | 4. 理解 数据库锁,是为了构建这些隔离级别存在的 32 | ### MySQL索引使用的注意事项 33 | 1. 34 | 2. 35 | 3. 36 | ### 聚集索引与非聚集索引的区别 37 | 1. 38 | 2. 39 | ### limit 20000 加载很慢怎么解决 40 | 1. 41 | 2. 42 | ### es的使用场景 43 | 1. 44 | 2. 45 | ### mogodb的使用场景 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # java_interview_2018 2 | 2018年,各大互联网公司java面试题汇总 3 | -------------------------------------------------------------------------------- /java基础.md: -------------------------------------------------------------------------------- 1 | ### 面向对象基本特征 2 | - 什么是对象?对象有划分的边界,面试官其实想问 你怎么证明你能划分出对象,以及是合理的 3 | - 封装 4 | - 继承 5 | - 多态 6 | ![avatar](http://www.cnitblog.com/images/cnitblog_com/lily/1972/o_OOBase.gif) 7 | 8 | ### final, finally, finalize 的区别 9 | - final关键字:http://www.importnew.com/7553.html 10 | - finally 用于try语句块 11 | - finalize()是Object类的一个方法,与GC有关 12 | ### int 和 Integer 有什么区别 13 | - int是基本数据类型 初始化值0 14 | - Integer是int的封装类 初始化值null 15 | - 自动装箱 自动拆箱的细节 16 | ### 重载和重写的区别 17 | - override 重写是**父子类之间**多态性的一种体现 18 | - overload 重载是**同一个类中**多态性的一种体现 19 | ### 抽象类和接口有什么区别 20 | - 这题太难了 拒绝回答 21 | ### 说说反射的用途及实现 22 | - 用途的话 最常见的加载数据库驱动 23 | - 最重要的用途就是开发各种框架 比如spring的IOC、AOP都有用到 24 | ### 说说自定义注解的场景及实现 25 | - Annotation型定义为@interface 26 | - 举个例子 现在有个需求:通过aop监控接口调用的总时间(请求到来-返回响应), 27 | 但是只要监控部分接口,有的需要监控。这时可以自定义一个注解,在需要监控的 28 | 接口函数上加上此注解,配合AOP即可实现。Student.getClass.getAnnotation(NeedMonitor.class) 29 | ### HTTP 请求的 GET 与 POST 方式的区别 30 | - https://www.zhihu.com/question/28586791 31 | - https://www.oschina.net/news/77354/http-get-post-different 32 | - 按照上边这个博客的说法, 他们的没什么区别 33 | ### session 与 cookie 区别 34 | - 参考:https://www.zhihu.com/question/19786827 35 | - 为什么要有session机制 36 | - 由于http协议是无状态的 session用来跟踪用户状态 37 | ### session 分布式处理 38 | - session复制 39 | - session粘滞 40 | - session集中管理 41 | ### equals 与 == 的区别 42 | - 还有公司会问? 43 | - 一定记得要分 基本*数据类型*和*普通对象* 44 | ### wait和sleep的区别 45 | 1. 46 | ### 数组在内存中如何分配 47 | 1. 数组也是对象 JVM和普通java对象一样处理数组 48 | 2. 没有真正的多维数组 49 | ### 异常分类以及处理机制 50 | throwable 51 | Error jvm处理 52 | Exception 53 | checked Exception 需要在方法上声明 向上抛出 54 | runtime Exception 不必需处理 55 | ### Cloneable接口实现原理 56 | 1. 对象要想重写Object的clone()方法,必须要实现Cloneable 57 | 2. 设计不合理,apache common更方便 58 | ### wait和sleep的区别 59 | - https://www.zhihu.com/question/23328075 60 | 1. 首先,要记住这个差别,“sleep是Thread类的方法,wait是Object类的方法”。尽管这两个方法都会影响线程的执行行为,但是本质上是有区别的。 61 | 2. Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁 62 | 3. 调用wait后,需要别的线程执行notify/notifyAll才能够重新获得CPU执行时间(唤醒线程) 63 | -------------------------------------------------------------------------------- /java并发.md: -------------------------------------------------------------------------------- 1 | ## 2020年更新 2 | java并发书籍推荐《java并发编程实战》、《java并发编程的艺术》 3 | 4 | ### synchronized 的实现原理以及锁优化? 5 | 1. 参考:http://blog.csdn.net/javazejian/article/details/72828483 6 | 2. 优化要多扯,大谈特谈。具体参考《java并发编程实战》,讲的比较系统 7 | ### synchronized 在静态方法和普通方法的区别? 8 | 1. synchronized修饰静态方法,实际上是对该类对象(.class)加锁 俗称“类锁” 9 | 2. 修饰非静态方法,是对调用该方法的对象实例加锁,俗称“对象锁” 10 | 3. 一个对象在两个线程中分别调用一个静态synchronized方法和一个非静态 11 | synchronized方法 不会产生互斥 12 | ### synchronized 和 lock 有什么区别? 13 | - 参考:http://blog.csdn.net/natian306/article/details/18504111 14 | - ReentrantLock在加锁和内存上的语义和内置相同,此外它还提供了锁等待、可中断、公平性这几个特有功能 15 | 1. 用法区别: 16 | 1. sychronized 可以用在方法上;用在代码块,括号中指定锁对象 17 | 2. 需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁, 18 | 多个线程中必须要使用一个ReentrantLock类做为对象才能保证锁的生效。 19 | 且在加锁和解锁处需要通过lock()和unlock()显示指出。所以一般会在finally块中写unlock()以防死锁。 20 | 2. 性能区别: 21 | 1. jdk1.6对sychronized做了很大的优化 22 | 3. 用途区别: 23 | 1. lock能实现一些个性化的需求 24 | ### 分段锁的原理,锁粒度减小的思考 25 | 1. 总体思想就是减小锁的粒度, 26 | 2. 减少锁的竞争 27 | 3. 结合concurrentHashMap来说,要不然不好表达 28 | ### volatile 的实现原理? 29 | - JSR-133 JAVA内存模型与线程规范 对volatile的语义进行了重新规范 30 | - http://www.cnblogs.com/dolphin0520/p/3920373.html 31 | - 下面这段话摘自《深入理解Java虚拟机》: 32 | “观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,会多出一个lock前缀指令” 33 | - lock前缀指令实际上相当于一个内存屏障(也成内存栅栏),内存屏障会提供3个功能: 34 | 35 |    1)它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面; 36 | 即在执行到内存屏障这句指令时,在它前面的操作已经全部完成; 37 | 38 |    2)它会强制将对缓存的修改操作立即写入主存; 39 | 40 |    3)如果是写操作,它会导致其他CPU中对应的缓存行无效。 41 | ### CAS 有什么缺陷,如何解决? 42 | - 参考:http://zl198751.iteye.com/blog/1848575 43 | - CAS通过调用JNI的代码实现的。JNI:Java Native Interface为JAVA本地调用,允许java调用其他语言。 44 | 而compareAndSwapInt就是借助C来调用CPU底层指令实现的。 45 | 1. ABA问题,通过给数据加版本可以现实区分 46 | 2. 自旋等待时间过长,造成CPU资源浪费 47 | 48 | ### AQS 49 | 1. 全称AbstractQueuedSynchronizer 是JUC下提供的一套用于实现基于FIFO等待队列的阻塞锁和相关的同步器的一个同步框架 50 | 2. CountdownLatch、ReentrantLock、Semaphore、FutureTask(新版本不是依赖AQS了)都是基于AQS来实现的 51 | ### 如何检测死锁?怎么预防死锁? 52 | - https://juejin.im/post/5aaf6ee76fb9a028d3753534 53 | 1. 死锁分类: 54 | 1. 锁顺序死锁 55 | 2. 动态锁顺序死锁 56 | 3. 在协作对象之间的死锁 57 | 4. 资源死锁: 线程池死锁、网络连接池死锁 58 | 2. 死锁检测工具: 59 | 1. Jstack ---> jstack -F pid 60 | 2. JConsole ---> jconsole 会出来图形界面 61 | 3. 死锁的预防: 62 | 1. 以确定的顺序获取锁 63 | 2. Lock接口提供的tryLock(long time) 锁等待超时 自动放弃 64 | ### Java 内存模型? 65 | - JMM是围绕着在并发过程中如何处理*原子性*、*可见性*和*有序性*这3个特征来建立的. 66 | 1. 原子性:JMM直接保证原子性变量操作 load read assign use write store 67 | 2. 可见性:当一个线程修改了共享变量的值,其他线程可以立刻得知这个修改。volatile、synchronized、final 68 | 3. 有序性:单线程总是有序的;多线程靠volatile和synchronized保证线程之间操作的有序性 69 | 4. happen-before 先行发生原则 70 | ### 如何保证多线程下 i++ 结果正确? 71 | 1. sychronized同步方法或者代码块 72 | 2. 原子类 73 | ### 线程池的种类,区别和使用场景? 74 | - 参考:http://gityuan.com/2016/01/16/thread-pool/ 75 | 1. JDK针对不同需求,利用Executors类提供了4种不同的线程池(还有一些组合的): 76 | newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool, newSingleThreadExecutor 77 | 2. 基础ThreadPoolExecutor的核心参数,底层依赖AQS 78 | ### 分析线程池的实现原理和线程的调度过程? 79 | - 见上题链接 80 | ### 线程池如何调优,最大数目如何确认? 81 | 1. 需要针对具体情况而具体处理,不同的任务类别应采用不同规模的线程池, 82 | 任务类别可划分为: “CPU密集型任务”、“IO密集型任务“ 和 “混合型任务” 83 | 84 | 2. 利用线程池提供的参数进行监控 85 | 86 | 3. 通过扩展线程池进行监控,见上题链接 87 | ### ThreadLocal原理,用的时候需要注意什么? 88 | 1. https://blog.csdn.net/lovesomnus/article/details/64441426 89 | 2. https://droidyue.com/blog/2016/03/13/learning-threadlocal-in-java/ 90 | ### CountDownLatch 和 CyclicBarrier 、Semaphore的用法,以及相互之间的差别? 91 | - https://www.cnblogs.com/dolphin0520/p/3920397.html 92 | - 他们都是java并发编程里的辅助类,位于java.util.concurrent 93 | 1. CountDownLatch 正如其名,类似于一个计数器。 94 | 2. CyclicBarrier字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行 95 | 3. 信号量 与前两个区别很大 96 | ### 怎么实现所有线程在等待某个事件的发生才会去执行? 97 | - CyclicBarrier实现 98 | ### LockSupport工具 99 | 1. LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 100 | 2. 主要方法:park()、 unpark(Thread t) 101 | ### Condition接口及其实现原理 102 | 1. 103 | ### Fork/Join框架的理解 104 | - 参考:http://www.infoq.com/cn/articles/fork-join-introduction 105 | ### 八种阻塞队列以及各个阻塞队列的特性 106 | 1. ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。 107 | 2. LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。 108 | 3. PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。 109 | 4. DelayQueue:一个使用优先级队列实现的无界阻塞队列。 110 | 5. SynchronousQueue:一个不存储元素的阻塞队列。 111 | 6. LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。 112 | 7. LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。 113 | -------------------------------------------------------------------------------- /java集合.md: -------------------------------------------------------------------------------- 1 | 集合,其实就是HashMap和ConcurrentHashMap.前者主要考数据结构和扩容;后者重点在分段锁。 2 |
3 | 4 | ### List 和 Set 的区别 5 | 1. List可以元素重复,Set不允许有重复元素(不存在e1.equals(e2)) 6 | 2. list是有序的 set是无序的(treeSet是有序的) 7 | ### HashSet 是如何保证不重复的 8 | 1. 底层是hashMap的实现 9 | ### HashMap 是线程安全的吗,为什么不是线程安全的 10 | 1. 不是线程安全类 11 | ### HashMap 的扩容过程 12 | 1. 参考:https://www.jianshu.com/p/f6730d5784ad 13 | 2. 回答这题一定要说明是基于JDK1.7还是1.8,因为实现完全不一样 14 | ### HashMap 1.7 与 1.8的区别,说明1.8做了哪些优化 15 | 1. 扩容的区别,1.8加入了红黑树的数据结构 16 | 2. 17 | ### 强引用 、软引用、 弱引用、虚引用 18 | 1. 强引用 Student a = new Student() 19 | 2. 20 | 3. 21 | 4. 22 | ### Hashtable 是怎么加锁的 ? 23 | 1. 对数据进行读写的方法都加上synchronized的修饰 24 | ### ConcurrentHashMap 介绍?1.8 中为什么要用红黑树? 25 | 1. 26 | 2. 27 | ### Arrays.sort 实现原理 28 | 1. 策略设计模式(strategy pattern); 29 | 2. 归并排序(merge sort): 时间复杂度 n*log(n); 30 | ### LinkedHashMap的应用 31 | 1. 在网上查了 都说是可以基于LinkedHashMap实现LRU(least recently use) -------------------------------------------------------------------------------- /kafka专题.md: -------------------------------------------------------------------------------- 1 | 下列问题的回答都基于0.9.x及以上版本 2 | 所有问题都可以在[这儿](http://www.importnew.com/25247.html)找到答案 3 | ### kafka节点之间如何复制备份的? 4 | - Kafka每个topic的partition有N个副本(replicas), N个replicas中,其中一个replica为leader,其他都为follower, leader处理partition的所有读写请求,与此同时,follower会被动定期地去复制leader上的数据 5 | - 如果leader发生故障或挂掉,一个新leader被选举并被接受客户端的消息成功写入。Kafka确保从ISR中选举一个副本为leader 6 | 1. ISR = In-Sync Replicas [AR = ISR + OSR] 7 | 2. HW = HighWatermark 8 | 3. LEO = Log End Offset 9 | ### Kafka消息是否会丢失?为什么? 10 | 1. 当producer向leader发送数据时,可以通过request.required.acks参数来设置数据可靠性的级别 11 | 1. 1 默认 leader已成功收到数据并得到确认后发送下一条message 12 | 2. 0 producer无需等待来自broker的确认而继续发送下一批消息 可靠性最低 13 | 3. -1 producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成, 14 | 可靠性最高。但是这样也不能保证数据不丢失,比如当ISR中只有leader时 15 | 2. 如果要提高数据的可靠性,在设置request.required.acks=-1的同时,也要min.insync.replicas这个参数 16 | ### kafka最合理的配置? 17 | - 没有最合理,根据业务场景不同在可靠性和性能之间权衡 18 | - 当然要告诉面试官至少一种配置 exactly once 19 | ### kafka leader的选举机制? 20 | - Kafka在Zookeeper中为每一个partition动态的维护了一个ISR,这个ISR里的所有replica都跟上了leader,只有ISR里的成员才能有被选为leader的可能 21 | - 在ISR中至少有一个follower时,Kafka可以确保已经commit的数据不丢失,但如果某一个partition的所有replica都挂了,就无法保证数据不丢失了。这种情况下有两种可行的方案: 22 | 1. 等待ISR中任意一个replica“活”过来,并且选它作为leader 23 | 2. 选择第一个“活”过来的replica(并不一定是在ISR中)作为leader(默认) 24 | ### kafka的消息保证有几种方式 25 | - 0.11.x之后从语义上提供了exactly once, 之前的版本需要从业务层面实现 26 | 1. at most once 至少一次 27 | 2. at least once 至多一次 28 | 3. exactly once 正好一次 需要编码和配置来保证 29 | ### 高可靠配置 30 | 1. topic的配置:replication.factor>=3,即副本数至少是3个;2<=min.insync.replicas<=replication.factor 31 | 2. broker的配置:leader的选举条件unclean.leader.election.enable=false 32 | 3. producer的配置:request.required.acks=-1(all),producer.type=sync -------------------------------------------------------------------------------- /netty网络编程.md: -------------------------------------------------------------------------------- 1 | ### why netty 2 | 参考:https://blog.csdn.net/a953713428/article/details/65629552 3 | 1. 说java原生NIO的缺点 4 | 2. netty的优点:Netty是一个高性能、异步事件驱动的NIO框架, 5 | 它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架 6 | ### 常用tcp参数 7 | - https://blog.csdn.net/yangguosb/article/details/79185799 8 | 1. SO_SNDBUF 9 | 2. SO_RCVBUF 10 | 3. TCP_NODELAY 11 | 4. SO_KEEPALIVE: 是否使用TCP的心跳机制 12 | 5. SO_REUSERADDR: 是否复用处于TIME_WAIT状态连接的端口 13 | 6. SO_BACKLOG 14 | ### 说说业务中,Netty 的使用场景 15 | 1. 分布式框架中rpc通信 16 | 2. 自定义应用层协议实现 17 | ### 原生的 NIO 在 JDK 1.7 版本存在 epoll bug 18 | - https://blog.csdn.net/a925907195/article/details/73853771 19 | 1. cpu 100% 20 | 2. netty 屏蔽掉这个bug 21 | ### 什么是TCP 粘包/拆包,解决办法 22 | 1. tcp是基于stream的,他对上层应用层协议是无感知的。tcp segment的大小受MTU和网络状况 23 | 的影响可能会把一条应用消息分割成两次发送,也可能会把两条或多条应用消息组合发送 24 | 2. ①定长消息 ②分隔符 ③header+body header里用4个字节存储消息的长度 ④更复杂的应用层协议 25 | ### netty线程模型 26 | - 参见《netty权威指南v2》P423 27 | 1. netty的线程模型不是一层不变的 通过设置不同的启动参数,netty可以同时支持reactor单线程模型 28 | 、多线程模型、主从reactor多线程模型 29 | 2. NioEventLoopGroup: bossGroup workGroup 两个reactor线程池 30 | 1. boss用于接受client的connection请求 31 | 2. work用于处理I/O相关的读写操作 32 | ### 说说 Netty 的零拷贝 33 | 1. 在 OS 层面上的Zero-copy通常指避免在用户态(User-space)与内核态(Kernel-space)之间来回拷贝数据 34 | 2. Netty的 Zero-coyp 完全是在用户态(Java 层面)的, 它的 Zero-copy 的更多的是偏向于 35 | 优化数据操作 这样的概念 36 | 1. CompositeByteBuf 37 | 2. ByteBuf slice() 38 | 3. ByteBuf wrap() 39 | 4. FileRegion java.nio FileChannel.transferTo() 40 | ### Netty 内部执行流程 41 | 1. 42 | ### Netty重连实现 43 | - http://tterm.blogspot.com/2014/03/netty-tcp-client-with-reconnect-handling.html 44 | 1. channelFutureListener 45 | 2. inActive -------------------------------------------------------------------------------- /spring相关.md: -------------------------------------------------------------------------------- 1 | ### BeanFactory 和 FactoryBean? 2 | 1. BeanFactory 是spring框架最核心的接口,IOC容器 3 | 2. FactoryBean 用来定制实例化bean的逻辑 4 | ### Spring IOC 的理解,其初始化过程? 5 | 1. -------------------------------------------------------------------------------- /分布式相关.md: -------------------------------------------------------------------------------- 1 | ### Dubbo的底层实现原理和机制 2 | 1. 暂时没用过,了解后再更新 3 | ### 描述一个服务从发布到被消费的详细过程 4 | 1. 这题貌似是接着dubbo问的 5 | ### 分布式系统怎么做服务治理 6 | 1. 服务注册中心(比如spring cloud的eureka) 服务提供者 服务消费者 7 | 2. 服务消费的负载均衡 8 | ### 接口的幂等性的概念 9 | - 参考:https://blog.brucefeng.info/post/api-idempotent 10 | 1. 语义是指: 函数/接口可以使用相同的参数重复执行, 不应该影响系统状态, 也不会对系统造成改变 . 11 | 2. http的幂等性 12 | 3. 分布式接口的幂等性 13 | ### 消息中间件如何解决消息丢失问题 14 | 1. 15 | 2. 16 | ### Dubbo的服务请求失败怎么处理 17 | 1. 18 | ### 重连机制会不会造成错误 19 | 1. 20 | ### 对分布式事务的理解 21 | - 讲的很详细http://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651819891&idx=1&sn=3f0b9c251aed3b063ac40480e9b843a3&chksm=f0dcd90fc7ab5019b616f5c5b7eeb8567a0386434a4cae978c492cd2e65762b34c5b833c687e&mpshare=1&scene=23&srcid=0417c46K1Rby6tMaPTPEeSi3#rd 22 | 1. 强制一致性 23 | 2. 最终一致性 24 | 3. 参考:http://www.codeceo.com/distributed-transaction.html 25 | 4. 微服务构架下,分布式事务一般采用最终一致性保证:https://blog.csdn.net/javahongxi/article/details/54177741 26 | 5. 对于涉及支付的系统,人工对账是终极防线 27 | ### 如何实现负载均衡,有哪些算法可以实现? 28 | - spring cloud的:https://blog.csdn.net/rickiyeat/article/details/64918756 29 | 1. 随机 30 | 2. 轮询 31 | 3. BestAvailable 32 | 4. weighted 33 | ### Zookeeper的用途,选举的原理是什么?选举策略?watch机制? 34 | - http://blog.jobbole.com/110388/ 35 | 1. 配置服务 36 | 2. 分布式锁 37 | ### 数据的垂直拆分?水平拆分?分库分表后,如何解决全表查询的问题? 38 | - 看了网上说的比较乱 总结一下,数据拆分可以从两个维度来分类,第一类:分库分表;第二类: 39 | 水平拆分、垂直拆分。所以对应到实际应用场景,应该有四种:①垂直拆库 ②垂直拆表 ③水平拆库 40 | ④水平拆表 41 | http://www.infoq.com/cn/articles/summary-and-key-steps-of-vip-orders-depots-table# 42 | 1. ***垂直拆库*** 是根据数据库里面的数据表的相关性进行拆分,比如:一个数据库里面既存在用户数据,又存在订单数据,那么垂直拆分可以把用户数据放到用户库、把订单数据放到订单库 43 | 2. ***垂直拆表*** 是对数据表进行垂直拆分的一种方式,常见的是把一个多字段的大表按常用字段和非常用字段进行拆分,每个表里面的数据记录数一般情况下是相同的,只是字段不一样,使用主键关联 44 | 3. 水平拆分是把单个大表(数据量大>1000W行)按某个规则把数据分散到多个表的拆分方式 45 | 4. 拆分出来的表,可以分别放至到不同数据库中,即同时进行水平拆库操作 46 | ### 用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗?MQ系统的数据如何保证不丢失 47 | - 一定要结合一个实际的MQ产品来说,比如Kafka 48 | 1. 49 | 2. 50 | ### 如何做一个分布式锁,应用场景? 51 | - 一般有三种实现方案 52 | 1. redis:https://yq.aliyun.com/articles/307547 53 | 2. zookeeper:http://www.54tianzhisheng.cn/2018/04/24/Distributed_lock 54 | 3. mysql 55 | ### 分布式唯一ID 56 | 1. https://tech.meituan.com/dianping_order_db_sharding.html 57 | ### redis/zk节点宕机如何处理 58 | 1. 59 | 2. 60 | -------------------------------------------------------------------------------- /微服务.md: -------------------------------------------------------------------------------- 1 | ### 前后端分离是如何做的 2 | - https://segmentfault.com/a/1190000009329474 3 | - 我们项目的实践:后端spring cloud微服务 api-gateway统一对外暴露接口;前端angular+node 4 | 1. 交互形式:http restful 5 | 2. 开发模式:完全分离 接口文档交互 6 | ### 微服务哪些框架 7 | 1. spring cloud 8 | 2. 阿里的Dubbo 9 | ### 怎么理解 RPC 框架 10 | - https://www.zhihu.com/question/25536695 11 | ### 说说 RPC 的实现原理 12 | - 常见的rpc框架: thrift、grpc、dubbo 13 | - https://liuzhengyang.github.io/2016/12/16/rpc-principle/ 14 | 1. 通信模块 15 | 2. 编解码模块 16 | 3. 客户端 服务端 17 | ### 说说 Dubbo 的实现原理 18 | - 没用过 19 | ### 怎么理解 Restful 20 | - 又是一个哲学问题,哈哈 21 | - https://www.zhihu.com/question/27785028 22 | 1. URL定位资源,用http动词(get post等)描述操作 23 | 2. url设计时,原则上不使用动词,比如获取人员信息接口,/getPerson/1是不正确的,而应该用/person/1 24 | 3. http动词来实现资源的 增查改删: 25 | 1. GET: 获取资源 26 | 2. POST; 新增资源 27 | 3. PUT: 更新资源 28 | 4. DELETE: 删除资源 29 | 4. client与server之间传递资源的某种表现形式,如xml或json,jpg等 30 | ### 如何理解 RESTful API 的幂等性 31 | - https://juejin.im/entry/57fec6850e3dd90057e1e47e 32 | 1. 多次调用,不会影响到资源的变化,我们认为它幂等。 33 | 2. 幂等性指的是作用于结果而非资源本身。例如,这个HTTP GET方法可能会每次得到不同的返回内容,但并不影响资源。 34 | 3. GET PUT 多次调用和一次调用结果相同 35 | ### 说说 CAP 定理、 BASE 理论 36 | - https://www.jianshu.com/p/68c7c16b3fbd 37 | 1. C=一致性 A=可用性 P=分区容忍性: 38 | CAP理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。 39 | 2. Base理论:Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写 40 | ### 怎么考虑数据一致性问题 41 | 1. 强一致性 42 | 2. 最终一致性 43 | ### 说说最终一致性的实现方案 44 | - http://www.funtl.com/2018/04/10/interview/Java-面试宝典-说说最终一致性的实现方案/ 45 | 1. 消息队列 46 | 2. 保证exactly once 47 | ### 你怎么看待微服务 48 | 1. https://juejin.im/post/592f87feb123db0064e5ef7c 49 | 2. 单体-->SOA-->微服务 50 | 3. 微服务是SOA发展出来的产物,它是一种比较现代化的细粒度的SOA实现方式 51 | 4. 关于服务的尺寸,在实际情况中往往是一个服务应该能够代表「实际业务场景中的一块不可分割或不易分割的业务实体」 52 | ### 如何拆分服务 53 | - 业务为主 54 | 1. 首先要划分好业务的边界 55 | 2. 单一职责 56 | 3. 松耦合 独立部署 独立进程 57 | 4. 服务之间轻量级的通信机制 RPC MQ http 58 | ### 微服务如何进行数据库管理 59 | 1. http://mp.weixin.qq.com/s?__biz=MzIyNjE4NjI2Nw==&mid=2652560380&idx=1&sn=c9d116f113e0ac37be4785818ced13a6&chksm=f39a3e88c4edb79ee60bf73461afc379a38affbc159a97e041ffbfb54570ade55566489b2cb4&scene=0#rd 60 | ### 如何应对微服务的链式调用异常 61 | - spring cloud sleuth + zipkin就是来解决这个问题的: http://www.ityouknow.com/springcloud/2018/02/02/spring-cloud-sleuth-zipkin.html 62 | - 助记词:trace span 63 | 1. 监控 64 | 2. 预警 65 | 3. 通知 66 | 4. 熔断 67 | ### 微服务的安全 68 | 1. 69 | 2. -------------------------------------------------------------------------------- /缓存相关.md: -------------------------------------------------------------------------------- 1 | ### 1、Redis用过哪些数据类型,以及Redis底层怎么实现 2 | 1. 3 | 2. 4 | ### Redis缓存穿透,缓存雪崩 5 | 1. 6 | 2. 7 | ### 如何使用Redis来实现分布式锁 8 | - https://yq.aliyun.com/articles/307547?utm_content=m_37928 9 | ### Redis的并发竞争问题如何解决 10 | 1. 11 | ### Redis持久化的几种方式,优缺点是什么,怎么实现的 12 | - https://www.cnblogs.com/ssssdy/p/7132856.html 13 | 1. RDB 14 | 2. AOF 15 | ### Redis的缓存失效(数据过期)策略 16 | 1. 17 | 2. 18 | ### Redis集群,高可用原理 19 | 1. https://tech.youzan.com/redisji-qun-shi-xian-yuan-li-tan-tao/ 20 | ### Redis缓存分片 21 | 1. 22 | 2. -------------------------------------------------------------------------------- /视频整理/java高级开发群分享视频.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makerlee/java_interview_2018/2574151b04f2d2b32d19b0493121f45b44f4e517/视频整理/java高级开发群分享视频.txt --------------------------------------------------------------------------------