- [一 Java基础](#一-java基础) - [一致性hash算法](#一致性hash算法) - [sleep和wait](#sleep和wait) - [强软弱虚引用](#强软弱虚引用) - [Arrays.sort原理](#arrayssort原理) - [创建对象的方式](#创建对象的方式) - [若hashcode方法永远返回1会产生什么结果](#若hashcode方法永远返回1会产生什么结果) - [解决hash冲突的三种方法](#解决hash冲突的三种方法) - [为什么要重写hashCode()方法和equals()方法以及如何进行重写](#为什么要重写hashcode方法和equals方法以及如何进行重写) - [动态代理](#动态代理) - [sleep和wait的区别](#sleep和wait的区别) - [java 地址和值传递的例子](#java-地址和值传递的例子) - [Java序列化](#java序列化) - [java NIO,java 多线程、线程池,java 网络编程解决并发量](#java-niojava-多线程-线程池java-网络编程解决并发量) - [JDBC 连接的过程 ,手写 jdbc 连接过程](#jdbc-连接的过程-手写-jdbc-连接过程) - [说出三个遇到过的程序报异常的情况](#说出三个遇到过的程序报异常的情况) - [socket 是靠什么协议支持的](#socket-是靠什么协议支持的) - [java io 用到什么设计模式](#java-io-用到什么设计模式) - [serviable 的序列化,其中 uuid 的作用](#serviable-的序列化其中-uuid-的作用) - [什么情景下会用到反射](#什么情景下会用到反射) - [浅克隆与深克隆有什么区别,如何实现深克隆](#浅克隆与深克隆有什么区别如何实现深克隆) - [反射能够使用私有的方法属性吗和底层原理?](#反射能够使用私有的方法属性吗和底层原理) - [处理器指令优化有些什么考虑?](#处理器指令优化有些什么考虑) - [object 对象的常用方法](#object-对象的常用方法) - [Stack 和 ArrayList 的区别](#stack-和-arraylist-的区别) - [statement 和 prestatement 的区别](#statement-和-prestatement-的区别) - [手写模拟实现一个阻塞队列](#手写模拟实现一个阻塞队列) - [util 包下有哪几种接口](#util-包下有哪几种接口) - [很常见的 Nullpointerexception ,你是怎么排查的,怎么解决的;](#很常见的-nullpointerexception-你是怎么排查的怎么解决的) - [静态内部类和非静态内部类的区别是什么?](#静态内部类和非静态内部类的区别是什么) - [怎么创建静态内部类和非静态内部类?](#怎么创建静态内部类和非静态内部类) - [Xml 解析方式,原理优缺点](#xml-解析方式原理优缺点) - [静态变量和全局变量的区别](#静态变量和全局变量的区别) - [二 Java集合](#二-java集合) - [hashmap的jdk1.7和jdk1.8区别](#hashmap的jdk17和jdk18区别) - [concurrenthashmap的jdk1.7和jdk1.8区别](#concurrenthashmap的jdk17和jdk18区别) - [HashMap 实现原理,扩容因子过大过小的缺点,扩容过程 采用什么方法能保证每个 bucket 中的数据更均匀 解决冲突的方式,还有没有其他方式(全域哈希)](#hashmap-实现原理扩容因子过大过小的缺点扩容过程-采用什么方法能保证每个-bucket-中的数据更均匀-解决冲突的方式还有没有其他方式全域哈希) - [Collection 集合类中只能在 Iterator 中删除元素的原因](#collection-集合类中只能在-iterator-中删除元素的原因) - [ArrayList、LinkedList、Vector](#arraylist-linkedlist-vector) - [还了解除 util 其他包下的 List 吗?](#还了解除-util-其他包下的-list-吗) - [CopyOnWriteArrayList](#copyonwritearraylist) - [ConcurrentHashMap 和 LinkedHashMap 差异和适用情形](#concurrenthashmap-和-linkedhashmap-差异和适用情形) - [ConcurrentHashMap分段锁是如何实现,ConcurrentHashmap jdk1.8 访问的时候是怎么加锁的,插入的时候是怎么加锁的 访问不加 锁插入的时候对头结点加锁](#concurrenthashmap分段锁是如何实现concurrenthashmap-jdk18-访问的时候是怎么加锁的插入的时候是怎么加锁的-访问不加-锁插入的时候对头结点加锁) - [ArrayDeque 的使用场景](#arraydeque-的使用场景) - [ArrayBlockingQueue 源码](#arrayblockingqueue-源码) - [hashmap 和 treemap 的区别](#hashmap-和-treemap-的区别) - [hashmap](#hashmap) - [treemap](#treemap) - [rehash 过程](#rehash-过程) - [HashMap 的负载因子,为什么容量为2^n](#hashmap-的负载因子为什么容量为2n) - [list,map,set 之间的区别](#listmapset-之间的区别) - [什么时候会用到 HashMap](#什么时候会用到-hashmap) - [常见的线程安全的集合类](#常见的线程安全的集合类) - [三 JVM](#三-jvm) - [反射在jvm层面的实现](#反射在jvm层面的实现) - [jvm的方法区存什么?](#jvm的方法区存什么) - [JDK1.8 JVM方法区变成了什么,为什么这样做](#jdk18-jvm方法区变成了什么为什么这样做) - [oom出现的原因](#oom出现的原因) - [Class.forName和ClassLoader的区别](#classforname和classloader的区别) - [java对象信息分配](#java对象信息分配) - [java虚拟机ZGC详解](#java虚拟机zgc详解) - [java虚拟机CMS详解](#java虚拟机cms详解) - [java虚拟机G1详解](#java虚拟机g1详解) - [JVM tomcat 容器启动,jvm 加载情况描述](#jvm-tomcat-容器启动jvm-加载情况描述) - [四 多线程并发](#四-多线程并发) - [volitale使用场景](#volitale使用场景) - [可重入锁,实现原理](#可重入锁实现原理) - [Java 无锁原理](#java-无锁原理) - [讲讲多线程,多线程的同步方法](#讲讲多线程多线程的同步方法) - [synchronized原理](#synchronized原理) - [reetrantlock](#reetrantlock) - [java 线程安全都体现在哪些方面](#java-线程安全都体现在哪些方面) - [如果维护线程安全 如果想实现一个线程安全的队列,可以怎么实现?](#如果维护线程安全-如果想实现一个线程安全的队列可以怎么实现) - [Java多线程通信方式](#java多线程通信方式) - [CountDownLatch、CyclicBarrier、Semaphore 用法总结](#countdownlatch-cyclicbarrier-semaphore-用法总结) - [juc下的内容](#juc下的内容) - [AOS等并发相关面试题](#aos等并发相关面试题) - [threadlocal](#threadlocal) - [java 线程池达到提交上限的具体情况 ,线程池用法,Java 多线程,线程池有哪几类,每一类的差别](#java-线程池达到提交上限的具体情况-线程池用法java-多线程线程池有哪几类每一类的差别) - [要你设计的话,如何实现一个线程池](#要你设计的话如何实现一个线程池) - [线程池的类型,固定大小的线程池内部是如何实现的,等待队列是用了哪一个队列实现 线程池种类和工作流程](#线程池的类型固定大小的线程池内部是如何实现的等待队列是用了哪一个队列实现-线程池种类和工作流程) - [线程池使用了什么设计模式](#线程池使用了什么设计模式) - [线程池使用时一般要考虑哪些问题](#线程池使用时一般要考虑哪些问题) - [线程池的配置](#线程池的配置) - [Excutor 以及 Connector 的配置](#excutor-以及-connector-的配置) - [五 Java框架(ssm)](#五-java框架ssm) - [hibernate](#hibernate) - [Hibernate 的生成策略](#hibernate-的生成策略) - [Hibernate 与 Mybatis 区别](#hibernate-与-mybatis-区别) - [Mybatis原理](#mybatis原理) - [mybatis执行select的过程](#mybatis执行select的过程) - [mybatis有哪些executors](#mybatis有哪些executors) - [mybatis插件原理](#mybatis插件原理) - [mybatis二级缓存](#mybatis二级缓存) - [spring&springmvc](#springspringmvc) - [spring中的设计模式](#spring中的设计模式) - [spring中bean的作用域](#spring中bean的作用域) - [BeanFactory和FactoryBean区别](#beanfactory和factorybean区别) - [aspect的种类](#aspect的种类) - [spring aop的实际应用](#spring-aop的实际应用) - [spring实现多线程安全](#spring实现多线程安全) - [spring的bean的高并发安全问题](#spring的bean的高并发安全问题) - [ioc aop总结(概述性)](#ioc-aop总结概述性) - [Spring 的加载流程,Spring 的源码中 Bean 的构造的流程](#spring-的加载流程spring-的源码中-bean-的构造的流程) - [Spring 事务源码,IOC 源码,AOP 源码](#spring-事务源码ioc-源码aop-源码) - [spring 的作用及理解 事务怎么配置](#spring-的作用及理解-事务怎么配置) - [spring事务失效情况](#spring事务失效情况) - [Spring 的 annotation 如何实现](#spring-的-annotation-如何实现) - [SpringMVC 工作原理](#springmvc-工作原理) - [了解 SpringMVC 与 Struct2 区别](#了解-springmvc-与-struct2-区别) - [springMVC 和 spring 是什么关系](#springmvc-和-spring-是什么关系) - [项目中 Spring 的 IOC 和 AOP 具体怎么使用的](#项目中-spring-的-ioc-和-aop-具体怎么使用的) - [spring mvc 底层实现原理](#spring-mvc-底层实现原理) - [动态代理的原理](#动态代理的原理) - [如果使用 spring mvc,那 post 请求跟 put 请求有什么区别啊; 然后开始问 springmvc:描述从 tomcat 开始到 springmvc 返回到前端显示的整个流程,接着问 springmvc 中的 handlerMapping 的内部实现,然后又问 spring 中从载入 xml 文件到 getbean 整个流程,描述一遍](#如果使用-spring-mvc那-post-请求跟-put-请求有什么区别啊-然后开始问-springmvc描述从-tomcat-开始到-springmvc-返回到前端显示的整个流程接着问-springmvc-中的-handlermapping-的内部实现然后又问-spring-中从载入-xml-文件到-getbean-整个流程描述一遍) - [六 微服务(springboot等)](#六-微服务springboot等) - [springboot](#springboot) - [springcloud](#springcloud) - [七 数据结构](#七-数据结构) - [二叉树相关](#二叉树相关) - [红黑树](#红黑树) - [八 数据库](#八-数据库) - [MySQL](#mysql) - [数据库死锁问题](#数据库死锁问题) - [hash索引和B+树索引的区别](#hash索引和b树索引的区别) - [可重复的原理MVCC](#可重复的原理mvcc) - [count(1)、count(*)、count(列名)](#count1-count-count列名) - [mysql的undo、redo、binlog的区别](#mysql的undo-redo-binlog的区别) - [explain解释](#explain解释) - [mysql分页查询优化](#mysql分页查询优化) - [sql注入](#sql注入) - [为什么用B+树](#为什么用b树) - [sql执行流程](#sql执行流程) - [聚集索引与非聚集索引](#聚集索引与非聚集索引) - [覆盖索引](#覆盖索引) - [sql总结](#sql总结) - [有人建议给每张表都建一个自增主键,这样做有什么优点跟缺点](#有人建议给每张表都建一个自增主键这样做有什么优点跟缺点) - [对 MySQL 的了解,和 oracle 的区别](#对-mysql-的了解和-oracle-的区别) - [500万数字排序,内存只能容纳5万个,如何排序,如何优化?](#500万数字排序内存只能容纳5万个如何排序如何优化) - [平时怎么写数据库的模糊查询(由字典树扯到模糊查询,前缀查询,例如“abc%”,还是索引策略的问题)](#平时怎么写数据库的模糊查询由字典树扯到模糊查询前缀查询例如abc还是索引策略的问题) - [数据库里有 10000000 条用户信息,需要给每位用户发送信息(必须发送成功),要求节省内存](#数据库里有-10000000-条用户信息需要给每位用户发送信息必须发送成功要求节省内存) - [项目中如何实现事务](#项目中如何实现事务) - [数据库设计一般设计成第几范式](#数据库设计一般设计成第几范式) - [mysql 用的什么版本 5.7 跟 5.6 有啥区别](#mysql-用的什么版本-57-跟-56-有啥区别) - [提升 MySQL 安全性](#提升-mysql-安全性) - [问了一个这样的表(三个字段:姓名,id,分数)要求查出平均分大于 80 的 id 然后分数降序排序,然后经过提示用聚合函数 avg。](#问了一个这样的表三个字段姓名id分数要求查出平均分大于-80-的-id-然后分数降序排序然后经过提示用聚合函数-avg) - [为什么 mysql 事务能保证失败回滚](#为什么-mysql-事务能保证失败回滚) - [主键索引底层的实现原理](#主键索引底层的实现原理) - [经典的01索引问题?](#经典的01索引问题) - [如何在长文本中快捷的筛选出你的名字?](#如何在长文本中快捷的筛选出你的名字) - [多列索引及最左前缀原则和其他使用场景](#多列索引及最左前缀原则和其他使用场景) - [事务隔离级别](#事务隔离级别) - [索引的最左前缀原则](#索引的最左前缀原则) - [数据库悲观锁怎么实现的](#数据库悲观锁怎么实现的) - [建表的原则](#建表的原则) - [索引的内涵和用法](#索引的内涵和用法) - [给了两条 SQL 语句,让根据这两条语句建索引(个人想法:主要考虑复合索引只能匹配前缀列的特点)](#给了两条-sql-语句让根据这两条语句建索引个人想法主要考虑复合索引只能匹配前缀列的特点) - [那么我们来聊一下数据库。A 和 B 两个表做等值连接(Inner join) 怎么优化](#那么我们来聊一下数据库a-和-b-两个表做等值连接inner-join-怎么优化) - [数据库连接池的理解和优化](#数据库连接池的理解和优化) - [Sql语句分组排序](#sql语句分组排序) - [SQL语句的5个连接概念](#sql语句的5个连接概念) - [数据库优化和架构(主要是主从分离和分库分表相关)](#数据库优化和架构主要是主从分离和分库分表相关) - [分库分表](#分库分表) - [跨库join实现](#跨库join实现) - [探讨主从分离和分库分表相关](#探讨主从分离和分库分表相关) - [数据库中间件](#数据库中间件) - [读写分离在中间件的实现](#读写分离在中间件的实现) - [限流 and 熔断](#限流-and-熔断) - [行锁适用场景](#行锁适用场景) - [Redis](#redis) - [redis为什么快?](#redis为什么快) - [Redis 数据结构原理](#redis-数据结构原理) - [Redis 持久化机制](#redis-持久化机制) - [Redis 的一致性哈希算法](#redis-的一致性哈希算法) - [redis了解多少](#redis了解多少) - [redis五种数据类型,当散列类型的 value 值非常大的时候怎么进行压缩](#redis五种数据类型当散列类型的-value-值非常大的时候怎么进行压缩) - [用redis怎么实现摇一摇与附近的人功能](#用redis怎么实现摇一摇与附近的人功能) - [redis 主从复制过程](#redis-主从复制过程) - [Redis 如何解决 key 冲突](#redis-如何解决-key-冲突) - [redis 是怎么存储数据的](#redis-是怎么存储数据的) - [redis 使用场景](#redis-使用场景) - [九 计算机网络](#九-计算机网络) - [cookie 禁用怎么办](#cookie-禁用怎么办) - [Netty new 实例化过程](#netty-new-实例化过程) - [socket 实现过程,具体用的方法;怎么实现异步 socket.](#socket-实现过程具体用的方法怎么实现异步-socket) - [浏览器的缓存机制](#浏览器的缓存机制) - [http相关问题](#http相关问题) - [TCP三次握手第三次握手时ACK丢失怎么办](#tcp三次握手第三次握手时ack丢失怎么办) - [dns属于udp还是tcp,原因](#dns属于udp还是tcp原因) - [http的幂等性](#http的幂等性) - [建立连接的过程客户端跟服务端会交换什么信息(参考 TCP 报文结构)](#建立连接的过程客户端跟服务端会交换什么信息参考-tcp-报文结构) - [丢包如何解决重传的消耗](#丢包如何解决重传的消耗) - [traceroute 实现原理](#traceroute-实现原理) - [IO多路复用](#io多路复用) - [select 和 poll 区别?](#select-和-poll-区别) - [在不使用 WebSocket 情况下怎么实现服务器推送的一种方法](#在不使用-websocket-情况下怎么实现服务器推送的一种方法) - [可以使用客户端定时刷新请求或者和 TCP 保持心跳连接实现。](#可以使用客户端定时刷新请求或者和-tcp-保持心跳连接实现) - [查看磁盘读写吞吐量?](#查看磁盘读写吞吐量) - [PING 位于哪一层](#ping-位于哪一层) - [网络重定向,说下流程](#网络重定向说下流程) - [controller 怎么处理的请求:路由](#controller-怎么处理的请求路由) - [IP 地址分为几类,每类都代表什么,私网是哪些](#ip-地址分为几类每类都代表什么私网是哪些) - [十 操作系统](#十-操作系统) - [Java I/O 底层细节,注意是底层细节,而不是怎么用](#java-io-底层细节注意是底层细节而不是怎么用) - [Java IO 模型(BIO,NIO 等) ,Tomcat 用的哪一种模型](#java-io-模型bionio-等-tomcat-用的哪一种模型) - [当获取第一个获取锁之后,条件不满足需要释放锁应当怎么做?](#当获取第一个获取锁之后条件不满足需要释放锁应当怎么做) - [手写一个线程安全的生产者与消费者。](#手写一个线程安全的生产者与消费者) - [进程和线程调度方法](#进程和线程调度方法) - [linux](#linux) - [linux查找命令](#linux查找命令) - [项目部署常见linux命令](#项目部署常见linux命令) - [进程文件里有哪些信息](#进程文件里有哪些信息) - [sed 和 awk 的区别](#sed-和-awk-的区别) - [linux查看进程并杀死的命令](#linux查看进程并杀死的命令) - [有一个文件被锁住,如何查看锁住它的线程?](#有一个文件被锁住如何查看锁住它的线程) - [如何查看一个文件第100行到150行的内容](#如何查看一个文件第100行到150行的内容) - [如何查看进程消耗的资源](#如何查看进程消耗的资源) - [如何查看每个进程下的线程?](#如何查看每个进程下的线程) - [linux 如何查找文件](#linux-如何查找文件) - [select epoll等问题](#select-epoll等问题) - [十一 框架其他](#十一-框架其他) - [Servlet 的 Filter 用的什么设计模式](#servlet-的-filter-用的什么设计模式) - [zookeeper 的常用功能,自己用它来做什么](#zookeeper-的常用功能自己用它来做什么) - [redis 的操作是不是原子操作](#redis-的操作是不是原子操作) - [秒杀业务场景设计](#秒杀业务场景设计) - [如何设计淘宝秒杀系统(重点关注架构,比如数据一致性,数据库集群一致性哈希,缓存, 分库分表等等)](#如何设计淘宝秒杀系统重点关注架构比如数据一致性数据库集群一致性哈希缓存-分库分表等等) - [对后台的优化有了解吗?比如负载均衡](#对后台的优化有了解吗比如负载均衡) - [对 Restful 了解 Restful 的认识,优点,以及和 soap 的区别](#对-restful-了解-restful-的认识优点以及和-soap-的区别) - [lrucache 的基本原理](#lrucache-的基本原理) - [十二 设计模式](#十二-设计模式) - [Java常见设计模式](#java常见设计模式) - [十三 分布式](#十三-分布式) - [dubbo中的dubbo协议和http协议有什么区别?](#dubbo中的dubbo协议和http协议有什么区别) - [负载均衡](#负载均衡) - [分布式锁的实现方式及优缺点](#分布式锁的实现方式及优缺点) - [CAP](#cap) - [如何实现分布式缓存](#如何实现分布式缓存) - [十四 其他](#十四-其他) - [Java 8 函数式编程 回调函数](#java-8-函数式编程-回调函数) - [函数式编程,面向对象之间区别](#函数式编程面向对象之间区别) - [Java 8 中 stream 迭代的优势和区别?](#java-8-中-stream-迭代的优势和区别) - [同步等于可见性吗?](#同步等于可见性吗) - [git底层数据结构](#git底层数据结构) - [安全加密](#安全加密) - [web安全问题](#web安全问题) ### 一 Java基础 #### 一致性hash算法 https://blog.csdn.net/qq_40551994/article/details/100991581 #### sleep和wait https://blog.csdn.net/qq_20009015/article/details/89980966 https://blog.csdn.net/lengyue309/article/details/79639245 #### 强软弱虚引用 https://blog.csdn.net/junjunba2689/article/details/80601729 #### Arrays.sort原理 https://www.cnblogs.com/baichunyu/p/11935995.html #### 创建对象的方式 https://blog.csdn.net/w410589502/article/details/56489294 #### 若hashcode方法永远返回1会产生什么结果 https://blog.csdn.net/cnq2328/article/details/50436175 #### 解决hash冲突的三种方法 https://blog.csdn.net/qq_32595453/article/details/80660676 #### 为什么要重写hashCode()方法和equals()方法以及如何进行重写 https://blog.csdn.net/xlgen157387/article/details/63683882 #### 动态代理 https://segmentfault.com/a/1190000011291179 #### sleep和wait的区别 https://blog.csdn.net/u012050154/article/details/50903326 #### java 地址和值传递的例子 https://www.cnblogs.com/zhangyu317/p/11226105.html #### Java序列化 https://juejin.im/post/5ce3cdc8e51d45777b1a3cdf #### java NIO,java 多线程、线程池,java 网络编程解决并发量 Java Nio使用:https://blog.csdn.net/forezp/article/details/88414741 Java Nio原理:https://www.cnblogs.com/crazymakercircle/p/10225159.html 线程池:http://cmsblogs.com/?p=2448 为什么nio快:https://blog.csdn.net/yaogao000/article/details/47972143 #### JDBC 连接的过程 ,手写 jdbc 连接过程 https://blog.csdn.net/qq_44971038/article/details/103204217 #### 说出三个遇到过的程序报异常的情况 https://www.cnblogs.com/winnie-man/p/10471338.html #### socket 是靠什么协议支持的 TCP/IP,协议。socket用于 通信,在实际应用中有im等,因此需要可靠的网络协议,UDP则是不可靠的协议,且服务端与客户端不链接,UDP用于广播,视频流等 #### java io 用到什么设计模式 装饰模式和适配器模式 #### serviable 的序列化,其中 uuid 的作用 相当于快递的打包和拆包,里面的东西要保持一致,不能人为的去改变他,不然就交易不成功。序列化与反序列化也是一样,而版本号的存在就是要是里面内容要是不一致,不然就报错。像一个防伪码一样。 #### 什么情景下会用到反射 注解、Spring 配置文件、动态代理、jdbc #### 浅克隆与深克隆有什么区别,如何实现深克隆 浅拷贝:仅仅克隆基本类型变量,而不克隆引用类型的变量 深克隆:既克隆基本类型变量,也克隆引用类型变量 1.浅克隆:只复制基本类型的数据,引用类型的数据只复制了引用的地址,引用的对象并没有复制,在新的对象中修改引用类型的数据会影响原对象中的引用。直接使用clone方法,再嵌套的还是浅克隆,因为有些引用类型不能直接克隆。 2.深克隆:是在引用类型的类中也实现了clone,是clone的嵌套,并且在clone方法中又对没有clone方法的引用类型又做差异化复制,克隆后的对象与原对象之间完全不会影响,但是内容完全相同。 #### 反射能够使用私有的方法属性吗和底层原理? https://blog.51cto.com/4247649/2109128 #### 处理器指令优化有些什么考虑? 禁止重排序 #### object 对象的常用方法 #### Stack 和 ArrayList 的区别 #### statement 和 prestatement 的区别 1、Statement用于执行静态SQL语句,在执行时,必须指定一个事先准备好的SQL语句。 2、PrepareStatement是预编译的SQL语句对象,sql语句被预编译并保存在对象中。被封装的sql语句代表某一类操作,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值。 3、使用PrepareStatement对象执行sql时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译。在缓冲区可以发现预编译的命令,并且可以重用。 4、PrepareStatement可以减少编译次数提高数据库性能。 #### 手写模拟实现一个阻塞队列 https://www.cnblogs.com/keeya/p/9713686.html #### util 包下有哪几种接口 #### 很常见的 Nullpointerexception ,你是怎么排查的,怎么解决的; #### 静态内部类和非静态内部类的区别是什么? #### 怎么创建静态内部类和非静态内部类? https://blog.csdn.net/qq_38366777/article/details/78088386 #### Xml 解析方式,原理优缺点 https://segmentfault.com/a/1190000013504078?utm_source=tag-newest #### 静态变量和全局变量的区别 ### 二 Java集合 #### hashmap的jdk1.7和jdk1.8区别 https://juejin.im/post/5aa5d8d26fb9a028d2079264 https://blog.csdn.net/qq_36520235/article/details/82417949 #### concurrenthashmap的jdk1.7和jdk1.8区别 https://juejin.im/post/5df8d7346fb9a015ff64eaf9 #### HashMap 实现原理,扩容因子过大过小的缺点,扩容过程 采用什么方法能保证每个 bucket 中的数据更均匀 解决冲突的方式,还有没有其他方式(全域哈希) 扩容:https://www.jianshu.com/p/5730bff593ed https://www.cnblogs.com/peizhe123/p/5790252.html #### Collection 集合类中只能在 Iterator 中删除元素的原因 在Iterator的内部有个expectedModCount 变量, 该变量每次初始化Iterator的时候等于ArrayList的modCount,modCount记录了对ArrayList的结构修改次数, 在通过Iterator对ArrayList进行结构的修改的时候都会将expectedModCount 与modCount同步,但是如果在通过Iterator访问的时候同时又通过索引的方式去修改ArrayList的结构的话,由于通过索引的方式只会修改modCount不会同步修改expectedModCount 就会导致modCount和expectedModCount 不相等就会抛ConcurrentModificationException, 这也就是Iterator的fail-fast,快速失效的。所以只要采取一种方式操作ArrayList就不会出问题, 当然ArrayList不是线程安全的,此处不讨论对线程问题。 更加详细的解释 https://blog.csdn.net/yanshuanche3765/article/details/78917507 #### ArrayList、LinkedList、Vector https://blog.csdn.net/zhangqiluGrubby/article/details/72870493 ##### 还了解除 util 其他包下的 List 吗? ##### CopyOnWriteArrayList (1)CopyOnWriteArrayList使用ReentrantLock重入锁加锁,保证线程安全; (2)CopyOnWriteArrayList的写操作都要先拷贝一份新数组,在新数组中做修改,修改完了再用新数组替换老数组,所以空间复杂度是O(n),性能比较低下; (3)CopyOnWriteArrayList的读操作支持随机访问,时间复杂度为O(1); (4)CopyOnWriteArrayList采用读写分离的思想,读操作不加锁,写操作加锁,且写操作占用较大内存空间,所以适用于读多写少的场合; (5)CopyOnWriteArrayList只保证最终一致性,不保证实时一致性; #### ConcurrentHashMap 和 LinkedHashMap 差异和适用情形 哈希表的原理:https://blog.csdn.net/yyyljw/article/details/80903391 可以以下方面进行回答 (1)使用的数据结构? (2)添加元素、删除元素的基本逻辑? (3)是否是fail-fast的? (4)是否需要扩容?扩容规则? (5)是否有序?是按插入顺序还是自然顺序还是访问顺序? (6)是否线程安全? (7)使用的锁? (8)优点?缺点? (9)适用的场景? (10)时间复杂度? (11)空间复杂度? #### ConcurrentHashMap分段锁是如何实现,ConcurrentHashmap jdk1.8 访问的时候是怎么加锁的,插入的时候是怎么加锁的 访问不加 锁插入的时候对头结点加锁 jdk1.8;https://blog.csdn.net/weixin_42130471/article/details/89813248 #### ArrayDeque 的使用场景 1、用数组实现的双端队列 2、线程不是安全的 3、可以用来实现栈 #### ArrayBlockingQueue 源码 http://cmsblogs.com/?p=4755 (1)ArrayBlockingQueue不需要扩容,因为是初始化时指定容量,并循环利用数组; (2)ArrayBlockingQueue利用takeIndex和putIndex循环利用数组; (3)入队和出队各定义了四组方法为满足不同的用途; (4)利用重入锁和两个条件保证并发安全:lock、notEmpty、notFull #### hashmap 和 treemap 的区别 http://cmsblogs.com/?p=4743 ##### hashmap (1)HashMap是一种散列表,采用(数组 + 链表 + 红黑树)的存储结构; (2)HashMap的默认初始容量为16(1<<4),默认装载因子为0.75f,容量总是2的n次方; (3)HashMap扩容时每次容量变为原来的两倍; (4)当桶的数量小于64时不会进行树化,只会扩容; (5)当桶的数量大于64且单个桶中元素的数量大于8时,进行树化; (6)当单个桶中元素数量小于6时,进行反树化; (7)HashMap是非线程安全的容器; (8)HashMap查找添加元素的时间复杂度都为O(1); ##### treemap (1)TreeMap的存储结构只有一颗红黑树; (2)TreeMap中的元素是有序的,按key的顺序排列; (3)TreeMap比HashMap要慢一些,因为HashMap前面还做了一层桶,寻找元素要快很多; (4)TreeMap没有扩容的概念; (5)TreeMap的遍历不是采用传统的递归式遍历; (6)TreeMap可以按范围查找元素,查找最近的元素; #### rehash 过程 https://www.jianshu.com/p/dde9b12343c1 #### HashMap 的负载因子,为什么容量为2^n HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同,这个实现就在把数据存到哪个链表中的算法; 这个算法实际就是取模,hash%length,计算机中直接求余效率不如位移运算,源码中做了优化hash&(length-1), hash%length==hash&(length-1)的前提是length是2的n次方; 为什么这样能均匀分布减少碰撞呢?2的n次方实际就是1后面n个0,2的n次方-1 实际就是n个1; 例如长度为9时候,3&(9-1)=0 2&(9-1)=0 ,都在0上,碰撞了; 例如长度为8时候,3&(8-1)=3 2&(8-1)=2 ,不同位置上,不碰撞; 其实就是按位“与”的时候,每一位都能 &1 ,也就是和1111……1111111进行与运算 #### list,map,set 之间的区别 https://blog.csdn.net/u012102104/article/details/79235938 #### 什么时候会用到 HashMap #### 常见的线程安全的集合类 ### 三 JVM #### 反射在jvm层面的实现 https://www.jianshu.com/p/b6cb4c694951 #### jvm的方法区存什么? https://www.jianshu.com/p/10584345b10a #### JDK1.8 JVM方法区变成了什么,为什么这样做 https://blog.csdn.net/u011665991/article/details/107141348/ #### oom出现的原因 https://blog.csdn.net/iteye_9584/article/details/82583093 #### Class.forName和ClassLoader的区别 https://blog.csdn.net/qq_27093465/article/details/52262340 #### java对象信息分配 https://blog.csdn.net/u014520047/article/details/81940447 #### java虚拟机ZGC详解 https://vimsky.com/article/4162.html #### java虚拟机CMS详解 https://juejin.im/post/5c7262a15188252f30484351 #### java虚拟机G1详解 https://zhuanlan.zhihu.com/p/59861022 #### JVM tomcat 容器启动,jvm 加载情况描述 tomcat请求流程:http://objcoding.com/2017/06/12/Tomcat-structure-and-processing-request-process/ 其实就是jvm的类加载情况,非常相似 https://blog.csdn.net/lduzhenlin/article/details/83013143 https://blog.csdn.net/xlgen157387/article/details/53521928 ### 四 多线程并发 #### volitale使用场景 https://blog.csdn.net/vking_wang/article/details/9982709 #### 可重入锁,实现原理 ReetrantLock:https://www.jianshu.com/p/f8f6ac49830e #### Java 无锁原理 https://blog.csdn.net/qq_39291929/article/details/81501829 #### 讲讲多线程,多线程的同步方法 #### synchronized原理 https://www.jianshu.com/p/d53bf830fa09 #### reetrantlock #### java 线程安全都体现在哪些方面 #### 如果维护线程安全 如果想实现一个线程安全的队列,可以怎么实现? JUC 包里的 ArrayBlockingQueue 还有 LinkedBlockingQueue 啥的又结合源码说了一通。 #### Java多线程通信方式 https://blog.csdn.net/u011514810/article/details/77131296 https://blog.csdn.net/xiaokang123456kao/article/details/77331878 #### CountDownLatch、CyclicBarrier、Semaphore 用法总结 https://segmentfault.com/a/1190000012234469 #### juc下的内容 https://blog.csdn.net/sixabs/article/details/98471709 #### AOS等并发相关面试题 https://cloud.tencent.com/developer/article/1471770 https://zhuanlan.zhihu.com/p/96544118 https://zhuanlan.zhihu.com/p/48295486 #### threadlocal https://juejin.im/post/5ac2eb52518825555e5e06ee #### java 线程池达到提交上限的具体情况 ,线程池用法,Java 多线程,线程池有哪几类,每一类的差别 https://blog.csdn.net/github_37130188/article/details/89504500 #### 要你设计的话,如何实现一个线程池 http://www.vcchar.com/thread-29098-1-1.html #### 线程池的类型,固定大小的线程池内部是如何实现的,等待队列是用了哪一个队列实现 线程池种类和工作流程 重点讲 newcached 线程池 线程池工作原理 比如 corePoolSize 和maxPoolSize 这两个参数该怎么调 http://cmsblogs.com/?p=2448 #### 线程池使用了什么设计模式 #### 线程池使用时一般要考虑哪些问题 https://juejin.im/post/5d1882b1f265da1ba84aa676#heading-14 #### 线程池的配置 #### Excutor 以及 Connector 的配置 https://www.cnblogs.com/kismetv/p/7806063.html ### 五 Java框架(ssm) ### hibernate #### Hibernate 的生成策略 主要说了 native 、uuid https://blog.csdn.net/itmyhome1990/article/details/54863822 #### Hibernate 与 Mybatis 区别 https://blog.csdn.net/wangpeng047/article/details/17038659 #### Mybatis原理 https://www.javazhiyin.com/34438.html #### mybatis执行select的过程 https://www.jianshu.com/p/ae2bda8f9d84 https://blog.csdn.net/qwesxd/article/details/90049863 #### mybatis有哪些executors https://blog.csdn.net/weixin_42495773/article/details/106799280 https://blog.csdn.net/weixin_34025051/article/details/92405286 #### mybatis插件原理 https://www.cnblogs.com/qdhxhz/p/11390778.html #### mybatis二级缓存 https://blog.csdn.net/csdnliuxin123524/article/details/78874261 ### spring&springmvc 面试题: https://mp.weixin.qq.com/s/2Y5X11TycreHgO0R3agK2A https://mp.weixin.qq.com/s/IdjCxumDleLqdU8MgQnrLQ #### spring中的设计模式 https://juejin.im/post/5ce69379e51d455d877e0ca0 #### spring中bean的作用域 https://blog.csdn.net/weidaoyouwen/article/details/80503575 #### BeanFactory和FactoryBean区别 https://blog.csdn.net/weixin_38361347/article/details/92852611 #### aspect的种类 https://blog.csdn.net/StubbornAccepted/article/details/70767014 #### spring aop的实际应用 https://blog.csdn.net/zzh_spring/article/details/107207025 #### spring实现多线程安全 https://www.cnblogs.com/tiancai/p/9627109.html #### spring的bean的高并发安全问题 https://blog.csdn.net/songzehao/article/details/103365494/ #### ioc aop总结(概述性) https://juejin.im/post/5b040cf66fb9a07ab7748c8b https://juejin.im/post/5b06bf2df265da0de2574ee1 #### Spring 的加载流程,Spring 的源码中 Bean 的构造的流程 spring ioc系列文章:http://cmsblogs.com/?p=2806 加载流程(概述):https://www.jianshu.com/p/5fd1922ccab1 循环依赖问题:https://blog.csdn.net/u010853261/article/details/77940767 https://blog.csdn.net/a15119273009/article/details/108007864 #### Spring 事务源码,IOC 源码,AOP 源码 https://juejin.im/post/5c525968e51d453f5e6b744b ioc、aop系列源码: https://segmentfault.com/a/1190000015319623 http://www.tianxiaobo.com/2018/05/30/Spring-IOC-%E5%AE%B9%E5%99%A8%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0%E5%AF%BC%E8%AF%BB/ #### spring 的作用及理解 事务怎么配置 https://www.jianshu.com/p/e7d59ebf41a3 #### spring事务失效情况 https://blog.csdn.net/luo4105/article/details/79733338 #### Spring 的 annotation 如何实现 https://segmentfault.com/a/1190000013258647 #### SpringMVC 工作原理 https://blog.csdn.net/cswhale/article/details/16941281 #### 了解 SpringMVC 与 Struct2 区别 https://blog.csdn.net/chenleixing/article/details/44570681 #### springMVC 和 spring 是什么关系 #### 项目中 Spring 的 IOC 和 AOP 具体怎么使用的 https://www.cnblogs.com/xdp-gacl/p/4249939.html https://juejin.im/post/5b06bf2df265da0de2574ee1 #### spring mvc 底层实现原理 https://blog.csdn.net/weixin_42323802/article/details/84038765 #### 动态代理的原理 https://juejin.im/post/5a3284a75188252970793195 #### 如果使用 spring mvc,那 post 请求跟 put 请求有什么区别啊; 然后开始问 springmvc:描述从 tomcat 开始到 springmvc 返回到前端显示的整个流程,接着问 springmvc 中的 handlerMapping 的内部实现,然后又问 spring 中从载入 xml 文件到 getbean 整个流程,描述一遍 ### 六 微服务(springboot等) #### springboot [springboot面试题](https://mp.weixin.qq.com/s/id0Ga1OC4D3Hu6lkzc9hRg) [springboot面试题2](https://mp.weixin.qq.com/s/XGIErbCx2i6Y8vBgw1gq_Q) #### springcloud [springcloud面试题](https://mp.weixin.qq.com/s/CYfLA9s9zhwcIwJjMFXhQQ) ### 七 数据结构 #### 二叉树相关 https://www.jianshu.com/p/655d83f9ba7b https://www.jianshu.com/p/ff4b93b088eb #### 红黑树 https://www.jianshu.com/p/e136ec79235c https://zhuanlan.zhihu.com/p/31805309 ### 八 数据库 ### MySQL #### 数据库死锁问题 https://blog.csdn.net/cbjcry/article/details/84920174 #### hash索引和B+树索引的区别 https://www.cnblogs.com/heiming/p/5865101.html #### 可重复的原理MVCC https://www.cnblogs.com/wade-luffy/p/8686883.html https://blog.csdn.net/weixin_42041027/article/details/100587435 https://www.jianshu.com/p/8845ddca3b23 #### count(1)、count(*)、count(列名) https://blog.csdn.net/iFuMI/article/details/77920767 #### mysql的undo、redo、binlog的区别 https://mp.weixin.qq.com/s/0z6GmUp0Lb1hDUo0EyYiUg #### explain解释 https://segmentfault.com/a/1190000010293791 #### mysql分页查询优化 https://blog.csdn.net/hanchao5272/article/details/102790490 #### sql注入 https://blog.csdn.net/github_36032947/article/details/78442189 #### 为什么用B+树 https://blog.csdn.net/xlgen157387/article/details/79450295 #### sql执行流程 https://juejin.im/post/5b7036de6fb9a009c40997eb #### 聚集索引与非聚集索引 https://juejin.im/post/5cdd701ee51d453a36384939 #### 覆盖索引 https://www.jianshu.com/p/77eaad62f974 #### sql总结 https://juejin.im/post/5d3f9cc1f265da03a31d1192 #### 有人建议给每张表都建一个自增主键,这样做有什么优点跟缺点 https://blog.csdn.net/yixuandong9010/article/details/72286029 #### 对 MySQL 的了解,和 oracle 的区别 https://juejin.im/post/5cbdbb455188250ab224802d #### 500万数字排序,内存只能容纳5万个,如何排序,如何优化? 参考文章:https://juejin.im/entry/5a27cb796fb9a045104a5e8c #### 平时怎么写数据库的模糊查询(由字典树扯到模糊查询,前缀查询,例如“abc%”,还是索引策略的问题) #### 数据库里有 10000000 条用户信息,需要给每位用户发送信息(必须发送成功),要求节省内存 #### 项目中如何实现事务 #### 数据库设计一般设计成第几范式 https://blog.csdn.net/hsd2012/article/details/51018631 #### mysql 用的什么版本 5.7 跟 5.6 有啥区别 #### 提升 MySQL 安全性 https://blog.csdn.net/listen_for/article/details/53907270 #### 问了一个这样的表(三个字段:姓名,id,分数)要求查出平均分大于 80 的 id 然后分数降序排序,然后经过提示用聚合函数 avg。 select id from table group by id having avg(score) > 80 order by avg(score) desc。 #### 为什么 mysql 事务能保证失败回滚 #### 主键索引底层的实现原理 B+树 #### 经典的01索引问题? #### 如何在长文本中快捷的筛选出你的名字? 全文索引 #### 多列索引及最左前缀原则和其他使用场景 #### 事务隔离级别 #### 索引的最左前缀原则 #### 数据库悲观锁怎么实现的 https://www.jianshu.com/p/f5ff017db62a #### 建表的原则 #### 索引的内涵和用法 #### 给了两条 SQL 语句,让根据这两条语句建索引(个人想法:主要考虑复合索引只能匹配前缀列的特点) #### 那么我们来聊一下数据库。A 和 B 两个表做等值连接(Inner join) 怎么优化 https://blog.csdn.net/hguisu/article/details/5731880 哈希 #### 数据库连接池的理解和优化 #### Sql语句分组排序 #### SQL语句的5个连接概念 #### 数据库优化和架构(主要是主从分离和分库分表相关) #### 分库分表 #### 跨库join实现 #### 探讨主从分离和分库分表相关 #### 数据库中间件 #### 读写分离在中间件的实现 #### 限流 and 熔断 #### 行锁适用场景 https://cloud.tencent.com/developer/article/1104098 ### Redis #### redis为什么快? https://zhuanlan.zhihu.com/p/57089960 #### Redis 数据结构原理 https://blog.csdn.net/jackFXX/article/details/82318080 #### Redis 持久化机制 #### Redis 的一致性哈希算法 #### redis了解多少 #### redis五种数据类型,当散列类型的 value 值非常大的时候怎么进行压缩 #### 用redis怎么实现摇一摇与附近的人功能 https://blog.csdn.net/smartwu_sir/article/details/80254733 #### redis 主从复制过程 #### Redis 如何解决 key 冲突 #### redis 是怎么存储数据的 #### redis 使用场景 ### 九 计算机网络 #### cookie 禁用怎么办 https://segmentfault.com/q/1010000007715137 #### Netty new 实例化过程 #### socket 实现过程,具体用的方法;怎么实现异步 socket. https://blog.csdn.net/charjay_lin/article/details/81810922 #### 浏览器的缓存机制 说明计算机网络的知识还没有记住 https://www.cnblogs.com/yangyangxxb/p/10218871.html #### http相关问题 https://mp.weixin.qq.com/s/xSGD3rWdboeeQvaS8jEchw #### TCP三次握手第三次握手时ACK丢失怎么办 https://www.cnblogs.com/wuyepeng/p/9801470.html #### dns属于udp还是tcp,原因 https://www.zhihu.com/question/310145373 #### http的幂等性 https://www.cnblogs.com/weidagang2046/archive/2011/06/04/idempotence.html #### 建立连接的过程客户端跟服务端会交换什么信息(参考 TCP 报文结构) #### 丢包如何解决重传的消耗 https://cloud.tencent.com/developer/article/1195037 #### traceroute 实现原理 https://zhuanlan.zhihu.com/p/36811672 #### IO多路复用 https://sanyuesha.com/python-server-tutorial/book/ch05.html #### select 和 poll 区别? 好文:https://www.jianshu.com/p/dfd940e7fca2 #### 在不使用 WebSocket 情况下怎么实现服务器推送的一种方法 服务器推送:https://juejin.im/post/5c20e5766fb9a049b13e387b #### 可以使用客户端定时刷新请求或者和 TCP 保持心跳连接实现。 #### 查看磁盘读写吞吐量? https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html #### PING 位于哪一层 ping命令本身相当于一个应用程序,位于应用层,虽然它使用的是ICMP协议,就好像HTTP位于应用层,但是也是使用的TCP协议 #### 网络重定向,说下流程 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Redirections #### controller 怎么处理的请求:路由 #### IP 地址分为几类,每类都代表什么,私网是哪些 https://zhuanlan.zhihu.com/p/54593244 ### 十 操作系统 #### Java I/O 底层细节,注意是底层细节,而不是怎么用 可以从Java IO底层、JavaIO模型(阻塞、异步等) https://www.cnblogs.com/crazymakercircle/p/10225159.html #### Java IO 模型(BIO,NIO 等) ,Tomcat 用的哪一种模型 tomcat支持:https://blog.csdn.net/fd2025/article/details/80007435 #### 当获取第一个获取锁之后,条件不满足需要释放锁应当怎么做? https://www.jianshu.com/p/eb112b25b848 #### 手写一个线程安全的生产者与消费者。 https://blog.csdn.net/u010983881/article/details/78554671 #### 进程和线程调度方法 https://www.jianshu.com/p/91c8600cb2ae ### linux #### linux查找命令 https://blog.51cto.com/whylinux/2043871 #### 项目部署常见linux命令 https://blog.csdn.net/u010938610/article/details/79625988 #### 进程文件里有哪些信息 #### sed 和 awk 的区别 awk用法:https://www.cnblogs.com/isykw/p/6258781.html 其实sed和awk都是每次读入一行来处理的,区别是:sed 适合简单的文本替换和搜索;而awk除了自动给你分列之外,里面丰富的函数大大增强了awk的功能。数据统计,正则表达式搜索,逻辑处理,前后置脚本等。因此基本上sed能做的,awk可以全部完成并且做的更好。 作者:哩掉掉 链接:https://www.zhihu.com/question/297858714/answer/572046422 #### linux查看进程并杀死的命令 https://blog.csdn.net/qingmu0803/article/details/38271077 #### 有一个文件被锁住,如何查看锁住它的线程? #### 如何查看一个文件第100行到150行的内容 https://blog.csdn.net/zmx19951103/article/details/78575265 #### 如何查看进程消耗的资源 https://www.cnblogs.com/freeweb/p/5407105.html #### 如何查看每个进程下的线程? https://blog.csdn.net/inuyashaw/article/details/55095545 #### linux 如何查找文件 linux命令:https://juejin.im/post/5d3857eaf265da1bd04f2437 #### select epoll等问题 https://juejin.im/post/5b624f4d518825068302aee9#heading-13 ### 十一 框架其他 #### Servlet 的 Filter 用的什么设计模式 https://www.jianshu.com/p/e4197a54828d #### zookeeper 的常用功能,自己用它来做什么 #### redis 的操作是不是原子操作 https://juejin.im/entry/58f9e22044d9040069d40dca #### 秒杀业务场景设计 #### 如何设计淘宝秒杀系统(重点关注架构,比如数据一致性,数据库集群一致性哈希,缓存, 分库分表等等) #### 对后台的优化有了解吗?比如负载均衡 我给面试官说了 Ngix+Tomcat 负载均 衡,异步处理(消息缓冲服务器),缓存(Redis, Memcache), NoSQL,数据库优化,存储索引优化 #### 对 Restful 了解 Restful 的认识,优点,以及和 soap 的区别 https://www.ruanyifeng.com/blog/2011/09/restful.html #### lrucache 的基本原理 ### 十二 设计模式 #### Java常见设计模式 - https://www.jianshu.com/p/61b67ca754a3 - 单例模式(双检锁模式)、简单工厂、观察者模式、适配器模式、职责链模式等等 - 享元模式模式 选两个画下 UML 图 - 手写单例 写的是静态内部类的单例,然后他问我这个地方为什么用 private,这儿为啥用 static, 这就考察你的基本功啦 - 静态类与单例模式的区别 - 单例模式 double check 单例模式都有什么,都是否线程安全,怎么改进(从 synchronized 到 双重检验锁 到 枚举 Enum) - 基本的设计模式及其核心思想 - 来,我们写一个单例模式的实现 ### 十三 分布式 #### dubbo中的dubbo协议和http协议有什么区别? https://blog.csdn.net/wjw_77/article/details/99696757 #### 负载均衡 https://juejin.im/post/5b39eea0e51d4558c1010e36 #### 分布式锁的实现方式及优缺点 https://zhuanlan.zhihu.com/p/62158041 #### CAP https://www.jianshu.com/p/8025e3346734 #### 如何实现分布式缓存 redis如何实现分布式缓存 https://stor.51cto.com/art/201912/607229.htm ### 十四 其他 ##### Java 8 函数式编程 回调函数 #### 函数式编程,面向对象之间区别 #### Java 8 中 stream 迭代的优势和区别? #### 同步等于可见性吗? 保证了可见性不等于正确同步,因为还有原子性没考虑。 #### git底层数据结构 https://blog.csdn.net/leo187/article/details/106233706 #### 安全加密 http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html https://yq.aliyun.com/articles/54155 #### web安全问题 https://juejin.im/post/5da44c5de51d45783a772a22