1.数据库相关
1.1.索引
优点:
1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引
2、大大加快数据的查询速度
缺点:
1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加
2、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值
3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。
使用原则:
通过上面说的优点和缺点,我们应该可以知道,并不是每个字段度设置索引就好,也不是索引越多越好,而是需要自己合理的使用。
1、对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引,
2、数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。
3、在一同值少的列上(字段上)不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引。
1.2.mysql的主从实现原理
主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
mysql支持的复制类型:
(1):基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。
一旦发现没法精确复制时, 会自动选着基于行的复制。
(2):基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
(3):混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
1.3.union和unionall的区别
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;(去重,排序)
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
1.4.inner 和 leftjoin的区别
left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接):返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) :只返回两个表中联结字段相等的行
1.5.sql优化
SQL优化 - 大道至简(老徐) - 博客园 (cnblogs.com)
常见的SQL优化 - 平凡的猪 - 博客园 (cnblogs.com)
1.6.mysql面试题
MySQL常见面试题 - power_LYL - 博客园 (cnblogs.com)
mysql 常见面试题 - 割肉机 - 博客园 (cnblogs.com)
2.算法与数据结构相关
2.1.栈
保存局部变量的值:包括1.基本数据类型的值。2.保存类的实例,即堆区对象的引用(指针)。3.保存加载方法时的帧。
栈是一个先入后出(FILO:First In Last Out)的有序列表,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性,栈有一个很重要的特殊性,就是存在栈中的数据可以共享。
2.2.堆
用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类拥有各自的成员变量,存储在堆中的不同位置,但是同一个类不同实例的他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。
2.3.java的集合类
2.3.1.数组
2.3.2.list
2.3.3.set
2.3.4.map
Java进阶篇(三)——Java集合类 - JAdam - 博客园 (cnblogs.com)
Java集合类详解 - Jay36 - 博客园 (cnblogs.com)
2.4.排序算法
2.4.1.冒泡排序
java实现冒泡排序 - 灰大狼。 - 博客园 (cnblogs.com)
2.4.2.快速排序
java之快速排序 - 一梦三千年 - 博客园 (cnblogs.com)
3.多线程相关
3.1多线程应用场景
1.为了不阻塞主线程,启动其他线程来做耗时的事情。
比如app开发中耗时的操作都不在UI主线程中做。
2.实现响应更快的应用程序, 即主线程专门监听用户请求,子线程用来处理用户请求。以获得大的吞吐量。
感觉这种情况下,多线程的效率未必高。 这种情况下的多线程是为了不必等待, 可以并行处理多条数据。
3.某种优先级虽然很低的服务,但是却要不定时去做。
比如Jvm的垃圾回收。
4.某种任务,虽然耗时,但是不耗CPU的操作时,开启多个线程,效率会有显著提高。
比如读取文件,然后处理。 磁盘IO是个很耗费时间,但是不耗CPU计算的工作。 所以可以一个线程读取数据,一个线程处理数据。肯定比
一个线程读取数据,然后处理效率高。 因为两个线程的时候充分利用了CPU等待磁盘IO的空闲时间。
3.2.多线程的实现方式
第一种:继承Thread类,重写该类的run()方法。
第二种:实现Runnable接口,并重写该接口的run()方法。
第三种:使用Callable和Future接口创建线程。
第四种:通过线程池创建线程。
3.3.多线程面试题
Java多线程面试题及答案(2020版) - Java团长 - 博客园 (cnblogs.com)
java多线程面试题整理及答案 - 洪墨水 - 博客园 (cnblogs.com)
4.计算机网络
4.1.网络协议图
计算机网络常见面试题 - 不懒人 - 博客园 (cnblogs.com)
4.2.tcp三次握手,四次挥手
4.3.tcp与udp的区别
- tcp基于连接,而udp无连接
- tcp对系统资源要求较多,udp较少
- tcp是流模式,而udp是数据报模式
- tcp保证数据的准确性,udp则可能会有丢包的风险
- tcp保证数据的顺序准确,udp则不保证
- tcp报文首部大小大于20字节,udp报文首部大小为8字节(包含源端口、目的端口、长度和校验码,每个2字节)
4.4.http的组成
4.4.1.HTTP 请求的组成
状态行、请求头、消息主体三部分组成。
4.4.2.HTTP 响应的组成
状态行、响应头、响应正文
4.4.3.HTTP常用请求方法
- GET 请求获取Request-URI所标识的资源
- POST 在Request-URI所标识的资源后附加新的数据,常用于提交表单。
- PUT 请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE 请求服务器删除Request-URI所标识的资源
4.5.http和https 为什么https更安全
https是在http的基础上添加了一个SSL加密层,是HTTP协议的安全版
- 对传输的数据进行加密,保证数据传输的数据安全
- 对网站服务器进行真实性验证
http传输采用的明文,内容可能会被窃听,
无法验证报文的完整性,也就是报文可能会被篡改,
不验证通信方的身份,可能会遇到伪装的通信方
https的内容会经过对称加密,每个连接都会生成一个唯一的加密密钥
内容传输会经过完整性校验,避免报文被篡改
第三方无法伪造身份,需要有数字证书验证
5.linux命令
6.jvm调优
JVM性能调优 - CSniper - 博客园 (cnblogs.com)
JVM调优常用命令 - tonglin0325 - 博客园 (cnblogs.com)
24个Jvm面试题总结 - JesseP - 博客园 (cnblogs.com)
7.web框架
SSM框架面试题及答案整理 - 工程师搁浅 - 博客园 (cnblogs.com)
JavaSSM框架精选50道面试题 - 曹明 - 博客园 (cnblogs.com)
8.设计模式
设计模式常见面试题汇总 - 洲洋1984 - 博客园 (cnblogs.com)
java设计模式面试专题及答案 - 程序员小羊 - 博客园 (cnblogs.com)
9.消息中间件
9.1.redis
redis面试题汇总 - ExplorerMan - 博客园 (cnblogs.com)
9.2.kafka
Kafka学习之路 (一)Kafka的简介 - 扎心了,老铁 - 博客园 (cnblogs.com)
kafka-常用面试题汇总 - d-w - 博客园 (cnblogs.com)
9.3.RabbitMQ
消息队列之 RabbitMQ - 简书 (jianshu.com)