一,数据库的备份与导入
1),数据库的备份
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
例:mysqldump -u dbadmin -p myblog > /home/zhangy/blog/database_bak/myblog.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
例:mysqldump -u dbadmin -p myblog wp_users> /home/zhangy/blog/database_bak/blog_users.sql
3.导出一个数据库结构
mysqldump -u dbadmin -p -d --add-drop-table myblog > /home/zhangy/blog/database_bak/blog_struc.sql
说明:-d 没有数据 --add-drop-table 在每一个create语句以前增长一个drop table
4.导出数据库一个表结构
mysqldump -u dbadmin -p -d --add-drop-table myblog wp_users> /home/zhangy/blog/database_bak/blog_users_struc.sql
说明:-d 没有数据 --add-drop-table 在每一个create语句以前增长一个drop table
2),数据库的导入
1,用 mysqldump 备份出来的文件是一个能够直接倒入的 SQL 脚本,有两种方法能够将数据导入。
例如:
#/usr/local/mysql/bin/mysql -u root -p ***** myblog < /home/zhangy/blog/database_bak/myblog.sql
这种方法,我之前常常如今不多用了,由于很容易产生乱码,由于:
a,导出数据库时,你若是忘了设置导出字符集的话,在导入的时候,就有可能会出问题.
b,假如,你导出时设置导出时设置了utf8的编码,可是你又把你的数据库如今的字符集改为了gb2312的.这样又会乱码。
2,用 source 语句
例如:
mysql -u dbadmin -p
use myblog;
set names utf8; #这里的字符集根你的将要导入的数据库的字符集一至。
source /home/zhangy/blog/database_bak/myblog.sql;
11: socket编程
两个程序(进程)运行时,它们经过从套接字读出和写入数据彼此之间进行通讯。
网络应用程序,经过socket进行通讯。 socket将发送方的数据经过socket通讯(指定IP, 端口,协议)传递到接收方。
网络层的“ip地址”能够惟一标识网络中的主机,而传输层的“协议+端口”能够惟一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就能够标识网络的进程了,网络中的进程通讯就能够利用这个标志与其它进程进行交互。
网络中的进程是经过socket来通讯的
https://blog.csdn.net/m0_37947204/article/details/80489431
http://www.javashuo.com/article/p-drqmpbyr-gs.html
https://www.cnblogs.com/wangcq/p/3520400.html
12:为何有进程了,还要有线程
由于进程是系统分配资源的最小单位,进程切换开销大。
线程容许在同一个进程中同时存在多个程序控制流,线程会共享进程范围内的资源。
缘由: 线程是比进程更轻量级的调度执行单位。线程的引入,能够把一个进程的资源分配和执行调度分开,各个线程便可以共享进程资源(内存地址,文件I/O等),又能够独立调度(线程是CPU调度的基本单位)。
13:多路复用和多路分解
多路复用:将多个进程的套接字的数据取出,为各个数据添加上协议(ip,端口号), 组成分组,发送出去。
多路分解: 将套接字中的数据分解,发给各个进程,叫作多路分解。
IO多路复用:就是多个客户端线程发送过来IO请求,来的都放进来,而不是每一个链接为其开启一个服务端进程。服务端将其放到一个队列中,而后服务端一个线程对这个队列进行处理。处理完返回。至关于一个事件循环Event loop.
后台就一个线程,避免了线程切换和后天线程抢夺资源, 可能单cpu
14:校验和
一个十六进制数,
0x8732ACD87
前4为和后四位化成二进制,相加获得一个和,若是最高位有进位,就和的最后+1。 而后取反
15: 创建两个列的索引,复合查询 。符合索引的有效索引为最长前缀匹配。 例如 index(A,B,C) 那么有效索引为:(A),(A,B),(A,B,C)
16:String intern的用法
http://www.javashuo.com/article/p-xwueyuaf-eo.html
上面是jdk源码中对intern方法的详细解释。简单来讲就是intern用来返回常量池中的某字符串,若是常量池中已经存在该字符串,则直接返回常量池中该对象的引用。不然,在常量池中加入该对象,而后 返回引用。下面的一个例子详细的解释了intern的做用过程:
例如: jdk 1.7以后,将会在堆上建立对象,在常量池中保存符号引用, String.intern()返回字符串的首次出现的实例引用。
String st2=new StringBuilder("计算机").append("软件").toString(); System.out.println(st2.intern()==st2); String st3=new StringBuilder("计算机").append("软件").toString(); System.out.println(st3.intern()==st3); System.out.println(st3.intern()==st2); /**结果 true false true */
st3.intern()是首次计算机软件出现的实例引用(在常量池中)。
17:String 的equals 和==的区别
==是对象引用的比较
equals是逻辑一致性比较,对象覆盖了该方法,将会按照对象设定的比较方式进行比较。
String 覆盖了equals方法
public final class String implements Serializable, Comparable<String>, CharSequence { public boolean equals(Object var1) { if (this == var1) { return true; } else { if (var1 instanceof String) { String var2 = (String)var1; int var3 = this.value.length; if (var3 == var2.value.length) { char[] var4 = this.value; char[] var5 = var2.value; for(int var6 = 0; var3-- != 0; ++var6) { if (var4[var6] != var5[var6]) { return false; } } return true; } } return false; } } }
String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); /**结果 false true */
18:Java 中的编译期常量是什么?使用它又什么风险?
风险:使用了一个其它Jar包的编译器常量,jar包的发布者有可能会改变它的值。而你不知道,还在使用,解决方法,当更新Jar依赖时,要从新编译。
公共静态不可变(public static final )变量也就是咱们所说的编译期常量,这里的 public 可选的。实际上这些变量在编译时会被替换掉,由于编译器知道这些变量的值,而且知道这些变量在运行时不能改变。这种方式存在的一个问题是你使用了一个内部的或第三方库中的公有编译时常量,可是这个值后面被其余人改变了,可是你的客户端仍然在使用老的值,甚至你已经部署了一个新的jar。为了不这种状况,当你在更新依赖 JAR 文件时,确保从新编译你的程序。
19:运行时常量池
运行时常量池是方法区的一部分,存放编译器生成的各类字面量和符号引用, 字面量和符号引用 是Class文件的一部分。
方法区用于存放类信息,常量,静态变量,编译后的代码。
20: BIO,NIO,AIO. Selector
http://www.javashuo.com/article/p-sqmzvpaz-nh.html
http://www.javashuo.com/article/p-qkkfaxit-kk.html
BIO同步阻塞:BIO 每一个链接须要服务器建立一个线程。
NIO 同步非阻塞:NIO的最重要的地方是当一个链接建立后,不须要对应一个线程,这个链接会被注册到多路复用器上面,因此全部的链接只须要一个线程就能够搞定,当这个线程中的多路复用器进行轮询的时候,发现链接上有请求的话,才开启一个线程进行处理,也就是一个请求一个线程模式。
非阻塞:须要while轮询
AIO 异步阻塞:经过read,write异步操做来完成,
与NIO不一样,当进行读写操做时,只须直接调用API的read或write方法便可。这两种方法均为异步的,对于读操做而言,当有流可读取时,操做系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操做而言,当操做系统将write方法传递的流写入完毕时,操做系统主动通知应用程序。 便可以理解为,read/write方法都是异步的,完成后会主动调用回调函数。
同步和异步:
同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操做并等待或者轮询的去查看IO操做是否就绪,而异步是指用户进程触发IO操做之后便开始作本身的事情,而当IO操做已经完成的时候会获得IO完成的通知。
Selector 是一个选择器,轮询器。 用于NIO同步非阻塞。
http://www.importnew.com/26258.html
select将会采用轮询的方式对队列中的全部链接进行查询,获取有效的链接。可是,当链接特别多时,例如1000000个链接,可是有效请求特别少时,例如100个,那么将会形成极大的浪费。
epoll将活跃链接保存在一个红黑树中,每次只查询活跃链接。 已经取代了select/poll.
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package java.nio.channels; import java.io.Closeable; import java.io.IOException; import java.nio.channels.spi.SelectorProvider; import java.util.Set; public abstract class Selector implements Closeable { protected Selector() { } public static Selector open() throws IOException { return SelectorProvider.provider().openSelector(); } public abstract boolean isOpen(); public abstract SelectorProvider provider(); public abstract Set<SelectionKey> keys(); public abstract Set<SelectionKey> selectedKeys(); public abstract int selectNow() throws IOException; public abstract int select(long var1) throws IOException; public abstract int select() throws IOException; public abstract Selector wakeup(); public abstract void close() throws IOException; }
21: 了解的设计模式
a:工厂模式
http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html
http://www.cnblogs.com/java-my-life/archive/2012/04/07/2433939.html
c: 适配器模式:
http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html
d: 观察者模式
http://www.cnblogs.com/java-my-life/archive/2012/05/16/2502279.html
e: 策略模式
http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html
f: 代理模式
http://www.cnblogs.com/java-my-life/archive/2012/04/23/2466712.html
解释:
状态模式:状态决定行为, 状态是一个接口,状态(子类对象不一样)不一样,行为不一样。
策略模式:客户端选择不一样的策略,选择不一样的计算方法
工厂模式:各个零部件(产品零部件)的工厂,工程师组装
抽象工厂模式:每个产品,构成一个产品族,有产品工厂生成
建造者模式:一个统领,指挥建造者一步一步构建产品对象。 统领,建造者,产品(part1,part2).
适配器模式:适配类(ada.method1)没有须要的目标对象(target.method1,target.method2)中的方法,就建造一个适配器(method1(){ada.method1},method2),继承适配类和目标对象,将目标对象的方法用适配类方法重写.
观察者模式:为主题添加观察者对象(继承自抽象观察者),当主题变化时,通知观察者。 有推模式和拉模式,推模式是将主题变化的状态推给观察者,拉模式是将主题对象直接给观察者,由观察者本身从主题对象中获取内容。
代理模式:为一个类建立一个代理类,其中,代理类和被代理的类(目标类)实现了相同的接口,代理类也实现了InvocationHandler。 生成的代理类中有目标类的方法和hashCode,equals,toString方法,当调用这几个方法时>会调用super(invocaitonHandler)>会调用invoke方法>调用method.invoke(target)>调用了目标类了的方法。
22:缓存策略
http://www.javashuo.com/article/p-firrwpbx-gv.html
23:redis
redis底层是用字典(dict)数据结构存储的。
dict里面有两个哈希表,每一个哈希表的桶里面存储dictEntry链表,dictEntry存储具体的key和value。
redis支持的数据类型hashtable是用开链表的形式(和hashMap差很少)。
Redis也是惰性删除,即要用到数据时,先检查key是否过时,过时则删除,而后返回错误。单纯的靠惰性删除,上面说过可能会致使内存浪费,因此Redis也有补充方案,Redis里面有个定时执行的函数,叫servercron,它是维护服务器的函数,在它里面,会对过时数据进行删除,注意不是全删,而是在必定的时间内,对每一个数据库的expire dict里面的数据随机选取出来,若是过时,则删除,不然再选,直到规定的时间到。即随机选取过时的数据删除,这个操做的时间分两种,一种较长,一种较短,通常执行短期的删除,每隔必定的时间,执行一次长时间的删除。这样能够有效的缓解光采用惰性删除而致使的内存浪费问题。
redis持久化
1:保存redis数据库文件 RDB ,后台线程执行bgsave
2: 保存redis命令
2.1 根据aof_buf 向aof文件中输入命令
2.2 aof_rewrite命令能够根据数据库生成操做命令(逆向),将生成的命令存入aof
aof命令载入的时候,redis生成一个假的客户端,去执行这些命令,最后将原来 的数据恢复出来。
Redis是单event loop的,主线程是单线程的。
24: epoll
http://www.javashuo.com/article/p-wsiwtuxy-m.html
http://www.javashuo.com/article/p-bfjmamzc-mt.html
https://www.jianshu.com/p/36197dac65d9
select 使用扫描全表的形式找出活跃的链接,有最大fd限制,1024。 10万个fd至少须要100个进程
epoll首先create是建立对象的epoll对象(事件)的,ctl操做为红黑树添加,更新事件。当有有效事件发生时,经过事件的回调函数callback事件添加到了双向链表rlist中。
await查询双向链表中有无事件便可,有的话处理,没有等待。
25:复合索引的匹配策略,左向最长匹配
例如一个索引index(a,b,c), 那么可使用索引的选择项为:
select * from table a=''
select * from table a='' and b='';
select * from table a='' and b='' and c='';
26: 修饰符的做用范围从大到小 public - protected- default-private
27:进程间通讯方式: http://www.javashuo.com/article/p-vifdlolq-bd.html
近日想总结下进程间,线程间的通讯方式,在网上搜索了下,感受写的很好,照搬过来,当作加深记忆。
几种进程间的通讯方式
(1) 管道(pipe):管道是一种半双工的通讯方式,数据只能单向流动,并且只能在具备血缘关系的进程间使用。进程的血缘关系一般指父子进程关系。
(2)有名管道(named pipe):有名管道也是半双工的通讯方式,可是它容许无亲缘关系进程间通讯。
(3)信号量(semophore):信号量是一个计数器,能够用来控制多个进程对共享资源的访问。它一般做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源。所以,主要做为进程间以及同一进程内不一样线程之间的同步手段。
(4)消息队列(message queue):消息队列是由消息组成的链表,存放在内核中 并由消息队列标识符标识。消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
(5)信号(signal):信号是一种比较复杂的通讯方式,用于通知接收进程某一事件已经发生。
(6)共享内存(shared memory):共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问,共享内存是最快的IPC方式,它是针对其余进程间的通讯方式运行效率低而专门设计的。它每每与其余通讯机制,如信号量配合使用,来实现进程间的同步和通讯。
(7)套接字(socket):套接口也是一种进程间的通讯机制,与其余通讯机制不一样的是它能够用于不一样及其间的进程通讯。
几种线程间的通讯机制
一、锁机制
1.1 互斥锁:提供了以排它方式阻止数据结构被并发修改的方法。
1.2 读写锁:容许多个线程同时读共享数据,而对写操做互斥。
1.3 条件变量:能够以原子的方式阻塞进程,直到某个特定条件为真为止。对条件测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一块儿使用。
二、信号量机制:包括无名线程信号量与有名线程信号量
三、信号机制:相似于进程间的信号处理。
线程间通讯的主要目的是用于线程同步,因此线程没有象进程通讯中用于数据交换的通讯机制。
28:求一个环形链表的长度,
能够取一个节点做为头节点,而后将该节点赋值为head, 再一次向下取节点,并判断是否等于头节点,直到等于头结点,结束。
29:死锁产生的条件和预防
http://www.javashuo.com/article/p-byvlpsof-gq.html
30:深复制与浅复制 https://www.jianshu.com/p/aa6d493603d3
浅复制:仅仅复制一个对象的引用,clone就是浅复制。 克隆对象和原对象指向相同的位置。改变浅复制的引用的值,也将改变原对象的值。
深复制:经过序列化将对象写到流里面,而后经过反序列化复原原对象。 改变深复制对象的值,不会改变原对象的值。
31:TCP的状态
http://blog.51cto.com/jinlong/2065461
32:悲观锁和乐观锁 http://www.javashuo.com/article/p-qpuqpsfi-gk.html
首先介绍一些乐观锁与悲观锁:
悲观锁:老是假设最坏的状况,每次去拿数据的时候都认为别人会修改,因此每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了不少这种锁机制,好比行锁,表锁等,读锁,写锁等,都是在作操做以前先上锁。再好比Java里面的同步原语synchronized关键字的实现也是悲观锁。
乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,因此不会上锁,可是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可使用版本号等机制。乐观锁适用于多读的应用类型,这样能够提升吞吐量,像数据库提供的相似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。
33:装态码
200 OK
问题
主动发起关闭链接的操做的一方将达到TIME_WAIT状态,并且这个状态要保持Maximum Segment Lifetime的两倍时间。为何要这样作而不是直接进入CLOSED状态?
缘由:
- 保证TCP协议的全双工链接可以可靠关闭
- 保证此次链接的重复数据段从网络中消失
解释
- 若是Client直接CLOSED了,那么因为IP协议的不可靠性或者是其它网络缘由,致使Server没有收到Client最后回复的ACK。那么Server就会在超时以后继续发送FIN,此时因为Client已经CLOSED了,就找不到与重发的FIN对应的链接,最后Server就会收到RST而不是ACK,Server就会觉得是链接错误把问题报告给高层。这样的状况虽然不会形成数据丢失,可是却致使TCP协议不符合可靠链接的要求。因此,Client不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,可以保证对方收到ACK,最后正确的关闭链接。
- 若是Client直接CLOSED,而后又再向Server发起一个新链接,咱们不能保证这个新链接与刚关闭的链接的端口号是不一样的。也就是说有可能新链接和老链接的端口号是相同的。通常来讲不会发生什么问题,可是仍是有特殊状况出现:假设新链接和已经关闭的老链接端口号是同样的,若是前一次链接的某些数据仍然滞留在网络中,这些延迟数据在创建新链接以后才到达Server,因为新链接和老链接的端口号是同样的,又由于TCP协议判断不一样链接的依据是socket pair,因而,TCP协议就认为那个延迟的数据是属于新链接的,这样就和真正的新链接的数据包发生混淆了。因此TCP链接还要在TIME_WAIT状态等待2倍MSL,这样能够保证本次链接的全部数据都从网络中消失。
35: 判断一个链表中是否有环, http://www.javashuo.com/article/p-hmasbovi-ex.html
36: String ,StringBuffer,StringBuilder http://www.javashuo.com/article/p-pzzvfptq-mr.html
37: jvm何时会进行full gc.
a:当老年代的最大可用的连续空间大于新生代全部对象的总空间时。 容许minor gc
b: 当老年代的最大可用的连续空间S小于新生代全部对象的总空间时, 可是开启了HandlePromotionFailure=true设置容许担保失败时,而且S大于历次晋升到老年代对象的平均大小。容许发生minor gc
c: jdk1.6以后,HandlePromotionFailure已经再也不使用,只要老年代的最大可用的连续空间大于新生代全部对象的总空间 或者 大于历次晋升到老年代对象的平均大小。容许发生minor gc
何时会进行full gc.
d: 老年代的最大可用的连续空间小于历次晋升到老年代对象的平均大小,进行full gc。
当老年代的最大可用的连续空间小于新生代全部对象的总空间时,开启了HandlePromotionFailure=false不容许担保失败时,将进行full gc。
38:Spring Boot 启动流程,启动解析
http://www.javashuo.com/article/p-yytkatbe-ew.html
http://www.javashuo.com/article/p-flhyhcgb-dz.html
Spring 事务原理
http://www.javashuo.com/article/p-pqkcmraz-ce.html
Spring 事务传播机制:http://www.javashuo.com/article/p-fhpapdbr-dg.html
39:elasticsearch 原理
http://www.javashuo.com/article/p-zksoblfe-bo.html
倒排索引:http://www.javashuo.com/article/p-dampwjyp-by.html
倒排索引,和MyISAM的全文检索同样,用单词找文档。单词作键,文档列表做为值。
单词1:【记录1,记录2】
单词2:【记录1,记录3,记录5】
40:iPv4 和ipv6所包含的字段
ipv4: 版本号,首部长度,服务类型(将要求低时延,高吞吐量,或可靠性的数据报区别开来),数据报长度,标签,标识,片偏移,寿命,上层协议,校验和,选项,源ip,目的ip,数据。
ipv6: 版本号,流量类型,流标签,有效载荷长度,跳限制,下一个首部,源ip,目的ip,数据。
tcp: 源端口号,目的端口号,序列号,确认号,校验和,窗口,数据,选项 等。
udp:源端口号,目的端口号,长度,校验和,数据。
41:经常使用linux命令
http://www.javashuo.com/article/p-gvkrzyvd-m.html
42:项目中设置的jvm大小 871.12MB
43: Integer 详解
https://www.jianshu.com/p/9cb9c61b0986
44: Compable 和Compartor
http://www.javashuo.com/article/p-ofkjiiep-bm.html
45: 不使用第三方变量的交换,+-法,异或^
a = a + b;
b = a - b;
a = a - b;
46: 方法重载和重写的区别
方法重写(overriding):
一、也叫子类的方法覆盖父类的方法,要求返回值、方法名和参数都相同。
二、子类抛出的异常不能超过父类相应方法抛出的异常。(子类异常不能超出父类异常)
三、子类方法的的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
方法重载(overloading):重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,可是参数却不相同,方法体也不相同,最多见的重载的例子就是类的构造函数,能够参考API帮助文档看看类的构造方法
47:线程池
http://www.cnblogs.com/dolphin0520/p/3932921.html
https://blog.csdn.net/cjh94520/article/details/70545202/
为何要有线程池:1:由于线程的建立和销毁cpu开销比较大,2:由于无限制的建立线程池,资源消耗比较大。3:建立线程不是越多越好,必定程度便可。超过必定限度,性能反而会下降 4:稳定性,建立线程的数量受到多个因素的制约,例如JVM启动参数,Thread请求参数中请求的栈大小以及操做系统的支持。若是破坏了这些限制,极可能抛出OutOfMemoryError 。
线程池的好处:
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue<Runnable> workQueue,RejectedExecutionHandler handler);
1:maximumPoolSize线程池能建立的最大线程数量>稳定性增强。
2:corePoolSize 核心线程数量,这些线程一直在一个while死循环中运行(从workQueue总获取任务,执行), 其他的线程 (maximumPoolSize-corePoolSize) 个线程,当超过必定时间时,会销毁。这样可以保证资源开销不会太大。
3:long keepAliveTime,TimeUnit unit, 活跃时间和时间单位
4:workQueue 任务队列,当执行exec.execute(task)时,将会将task添加到workQueue中。 而后while循环中的线程,取出任务,最后仍是执行了Runnable.run()。
5:ThreadFactory 线程工厂,用来建立线程
6: handle ,当执行出现错误时,选择的处理策略,a:抛出异常,b:丢弃任务等。
线程池的大小http://www.javashuo.com/article/p-qmesfdwy-gh.html
48:spring boot特性,启动流程 http://www.javashuo.com/article/p-yytkatbe-ew.html
Spring 启动流程:http://www.javashuo.com/article/p-kikedxkm-cn.html
http://www.javashuo.com/article/p-flhyhcgb-dz.html
AOP, DI, IOC
49:Spring 如何保证线程安全的
由于Spring中的Bean实例是单例的, 每一个线程获取的时候,会用一个ThreadLocal为每一个线程建立一个Bean副本进行操做,保证了线程安全。
50:系统性能瓶颈
http://www.javashuo.com/article/p-yauekoey-cw.html
https://blog.csdn.net/smooth00/article/details/63680191
51: Spring Boot启动方式
Runner
52: 类加载器:
http://www.javashuo.com/article/p-zoasinon-cr.html
53: 测试工具:JEMTER
http://www.javashuo.com/article/p-fkdouhnu-nq.html
http://www.javashuo.com/article/p-tvwoymlh-dg.html
测试结果:
首次查询:500次请求须要6秒
第二次查询:500次请求须要3秒
54:高并发写入:
https://segmentfault.com/q/1010000005931313
55: 将某个字段不可持久化修饰符
transient
56:什么是微服务
https://blog.csdn.net/wuxiaobingandbob/article/details/78642020?locationNum=1&fps=1
https://www.oschina.net/news/70121/microservice
57:如何保证线程安全
https://blog.csdn.net/jinggod/article/details/78275763?utm_source=blogxgwz0
https://blog.csdn.net/zhouzhaoxiong1227/article/details/74932180/
58:elasticsearch 优化
https://yq.aliyun.com/articles/38285
http://www.javashuo.com/article/p-nkkxdaqt-no.html
59:CAS 适合读多写少的场景,例如秒杀活动。
java.util.concurrent包中的类都是用CAS原理完成的。
60:反射原理:http://www.javashuo.com/article/p-ourbsjow-dz.html
所以咱们就能够经过Class对象去得到成员变量的值,也就是咱们想要获得的变量名、修饰符列表、方法名等等,这就是反射的基本原理
61:分析进程状态的linux命令,查询哪个进程消耗资源过多等
ps
top
java中的命令jps
62:对象锁和类锁的做用范围
http://www.javashuo.com/article/p-kfirwuti-ex.html
63:为何3次握手:
http://blog.51cto.com/zhangxinbei/1829125
64:如何保证多人同时安全修改数据库
a: 在业务层使用框架自带的事务,
b: 在业务层使用锁,防止并发修改
c: 在数据层(数据库层sql语句)使用事务
d: 在数据层(数据库层sql语句)使用版本控制
https://bbs.csdn.net/topics/390466595?page=1
https://blog.csdn.net/baimin7657/article/details/8062939
65:先后端交互原理
https://blog.csdn.net/SoftwareTester_zys/article/details/79989956
http://www.javashuo.com/article/p-vtfefylr-g.html
http://www.cnblogs.com/nalanshawn/p/9351782.html
66:无状态和有状态
http://www.javashuo.com/article/p-dcwrgfzk-gc.html
67:post和put的区别
http://www.javashuo.com/article/p-ywputvlx-gk.html
68: restful和web service 的区别
http://www.javashuo.com/article/p-tepbeyuy-w.html
https://www.zhihu.com/question/28570307
https://blog.csdn.net/angus_17/article/details/80693165
http://www.javashuo.com/article/p-enjuqfer-cb.html
https://blog.csdn.net/angus_17/article/details/80693165
69:如何防止网站被爬虫
http://www.javashuo.com/article/p-dsjjegga-gv.html
https://bbs.csdn.net/topics/392070282
70:微服务:
微服务就是把不相关的服务构成一个独立单元。服务之间相互调用。
71:形成内存泄漏的缘由.