一. 字节
-
Java基础:集合类(put扩容之类)
【ArrayList;vector;hashmap;hashtable】
参考 -
多线程
【创建线程;线程状态;线程停止;sleep休眠;yield礼让;join合并;优先级;守护线程;同步锁;死锁】
参考 -
计算机网络tcp相关东西【靠什么保证可靠传输】
参考
【涉及:三次握手,四次挥手,为什么三次握手,三次握手会产生危险吗?为什么四次挥手?为什么等待2MSL】 -
http与https区别;https证书在哪存放;
http和https的区别参考
对称加密和非对称加密参考
https运行过程看后面的图片 -
get,post区别;post请求数据量过大,是一次发送还是可以分多次发送请求
简单介绍参考
更清楚明了的参考博客
get和post综合参考在HTTP报文上体现: Get方法的参数应该放在url中,Post方法参数应该放在body中
-
hashmap线程不安全的原因;concurrenthashmap为什么线程安全
hashmap底层图片;hashmap和hashtable区别5点
hashmap线程不安全:插入;resize;删除的时候
concurrenthashmap线程安全
concurrenthashmap线程安全 -
volatile关键字对可见性的保证;
参考 -
对锁有了解吗,我说volatile和synchronized,解释 volatile怎么加锁的
volatile:能保证可见性和有序性,不能够保证原子性JVM 会需要强制从内存中读写数据,保证了可见性。说到可见性,Java就是利用volatile来提供可见性的。 当一个变量被volatile修饰时,那么对它的修改会立刻刷新到主存,当其它线程需要读取该变量时,会去内存中读取新值。而普通变量则不能保证这一点。
JVM 会为 volatile 变量的读/写创建一个屏障,阻止指令的重排,保证了有序性。JMM是允许编译器和处理器对指令重排序的,但是规定了as-if-serial语义,即不管怎么重排序,程序的执行结果不能改变。但是在多线程中,指令重排可能导致问题,引用了volatile变量,就不能指令重排。 -
String和StringBuffer区别,String为什么不能被修改;
String为什么不能被修改 -
线程池基本参数
-
数据库:查询成绩最高的人的姓名
select name from student where score = (select max(score) from student)
-
编程:股票最大利润
参考 -
面向对象与面向过程
参考 -
一条sql语句查询慢有哪些可能
具体解释参考1、SQL偶尔执行慢,可能是因为网络抖动、InnoDB的脏页刷新机制、操作等待锁资源导致的;
2、SQL一直执行慢,可能是因为SQL执行没有索引或者没有走上索引,以及单表数据量过大导致的。 -
测试一个抖音拍视频,手势会有爱心桃
-
算法.数组中出现次数超过一半的数字
参考 -
分数都大于80的人
参考 -
智力题。MXN矩阵,求左上角走到右下角次数
-
百度页面加载不出来有什么原因
参考 -
Java中类变量[静态变量]和实例变量的区别
参考:生命周期;调用方式;存储位置 -
抽象类和接口区别
抽象类和接口基础参考
区别如下:1) 在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法。2) 一个类只能继承一个直接父类,这个父类可以是具体的类也可是抽象类;但是一个类可以实现多个接口。
-
反射怎么用
-
对象怎么创建
参考 -
数据库,索引,事务ACID,主键,外键(知道多少说多少)
参考二:(主键约束、自增约束),(外键约束),(唯一约束),(非空约束),(默认约束)
参考:数据库整体概念参考 -
tcp/udp区别,生活场景中哪些需要哪些协议
tcp:面向连接;可靠性高;时延大;适用于大文件
UDP:无连接;可靠性低;时延小;适合小文件
什么时候应该使用TCP:
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
那么什么时候应该使用UDP:
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。
比如,日常生活中,常见使用UDP协议的应用如下:QQ消息,QQ语音等 -
自己创建一个单链表,返回中间结点的值
先求size,然后求出中间的位置,遍历得到中间节点。
-
测试用例,一个简易的聊天系统
参考:功能;性能;界面;安全 -
算法题青蛙跳格子
参考 -
异常种类,
异常种类 -
Java垃圾回收
GC机制具体知识讲解
参考
程序结束之后对象会被怎么处理(垃圾回收)什么是堆内存?堆是在 JVM 启动时创建的,主要用来维护运行时数据,如运行过程中创建的对象和数组都是基于这块内存空间。
什么是垃圾?无任何对象引用的对象。
怎么判断是否是垃圾? 引用计数法;可达性分析法,可以作为GCRoot的是哪些对象。
有哪些方法回收这些垃圾?标记清理法;标记整理法;复制法;分代收集法
什么是分代回收机制?新生代;老年代;永久代。minor GC;major GC -
数组和链表的区别,插入数据时的复杂度
参考数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);
数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。 -
计算机网络七层模型
应用层;会话层;表示层;传输层;网络层;链路层;物理层
-
抓包软件使用过吗
-
进程和线程的区别;以及为什么引入线程
参考:二_5和7线程占有的都是不共享的,其中包括:栈、寄存器、状态、程序计数器
线程间共享的有:堆,全局变量,静态变量;
进程占有的资源有:地址空间,全局变量,打开的文件,子进程,信号量、账户信息。
36. 单元测试和集成测试
参考
37. 二叉平衡树的概念
二叉平衡树概念参考
旋转过程参考
38. 微信发红包的测试用例(功能、性能、安全、兼容性)
参考
39. 算法题:罗马字符转整数
参考
40. 网页缺失部分内容的原因
参考
-
微博在某些地区刷不出来的原因
-
8个球,找出其中的一个轻球最少需要多少次
2次 -
两个list合并成一个有序无重复的list
参考:把相等的时候单独拿出来即可 -
矿泉水瓶的测试用例
参考 -
5L的桶和6L的桶,取3L的水
参考 -
为什么有JAVA虚拟机
参考JVM是一种规定好的标准规范, 定义了.class文件在其内部运行的相关标准和规范。
-
拥塞机制中的快重传
快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方,可提高网络吞吐量约20%)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
-
进程之间的通信
管道;共享内存;消息传递;信号量;信号;socket
各个优缺点参考
参考(1)管道通信分为:匿名管道和命名管道,匿名管道只适合父子进程间通信,命名管道都可以,但是管道通信的方式:管道这种通信方式效率低,不适合进程间频繁地交换数据。
(2) 消息队列:,A 进程要给 B 进程发送消息,A 进程把数据放在对应的消息队列后就可以正常返回了,B 进程需要的时候再去读取数据就可以了。一是通信不及时,二是附件也有大小限制,这同样也是消息队列通信不足的点。
(3) 共享内存的机制,就是拿出一块虚拟地址空间来,映射到相同的物理内存中。用了共享内存通信方式,带来新的问题,那就是如果多个进程同时修改同一个共享内存,很有可能就冲突了。例如两个进程都同时写一个地址,那先写的那个进程会发现内容被别人覆盖了。
(4) 信号量其实是一个整型的计数器,主要用于实现进程间的互斥与同步,而不是用于缓存进程间通信的数据。使用原语PV操作。
(5) 上面说的进程间通信,都是常规状态下的工作模式。对于异常情况下的工作模式,就需要用信号 的方式来通知进程。
(6) 前面提到的管道、消息队列、共享内存、信号量和信号都是在同一台主机上进行进程间通信,那要想跨网络与不同主机上的进程之间通信,就需要 Socket 通信了。 -
线程之间的通信
参考线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。
-
死锁的产生
必要条件:互斥条件;不可剥夺性;请求与保持;循环等待
-
进程的状态
新建;就绪;运行;阻塞;死亡;挂起
-
二叉树的遍历
参考 -
了解乐观锁和悲观锁吗
参考CAS算法:在对数据进行操作的时候,先把原始数据备份,当真正实用的时候验证备份数据和数据库中的数据是否一致,一致就不进行任何操作,不一致就更新备份的数据,直到两者相同,验证通过。
-
算法题:一个排列好的数组输出所有不相同数字的个数
用set
-
算法题:输入{’‘abc’’,’‘bac’’,’‘cab’’,’‘atc’’,’‘act’’,’‘aac’’,’‘fbc’’};
输出二维数组每一行为相同字母拼接成的字符串{{’‘abc’’,’‘bac’’,’‘cab’’},{’‘atc’’,’‘act’’
},{’‘aac’’},{’‘fbc’’}}
利用排序,然后hashmap -
主键唯一键之间有什么区别
主键不能为null,唯一主键可以为null -
数据库中char和varchar的区别
数据类型参考
数据库中char和varchar的区别 -
数据库在一个成绩单中选出平均成绩小于60的学生的ID和平均成绩
select ID,avg(score) from student group by name having avg(score)>=60
也不知道对不对?? -
抖音评论的测试
点赞参考 -
按序增长的一个数组求出小于m的最大的数
参考 -
redies和数据库的区别,什么时候用Redis什么时候用数据库
说说redis中的数据结构和应用场景
redies和数据库详细参考
redies和数据库简单参考【类型上;作用上;需求上】Redis适合放一些频繁使用,比较热的数据,因为是放在内存中,读写速度都非常快,一般会应用在下面一些场景:排行榜、计数器、消息队列推送、好友关注、粉丝.
-
Python元组和list区别
元祖不可变;列表可变。
-
垃圾回收【参考31】
-
分代回收【参考31】
-
内连接,左连接,右连接
参考 -
算法题:一个二维字符矩阵
查找rad
满足r和a是上下左右的关系则返回true 否则返回false 而且不能走走过的字符 -
hashmap的底层实现
底层简单介绍参考
底层代码详细介绍参考
参考博客 -
两个桶,放红球100白球100怎么才可以让每次取一个桶红球的概率最高
参考 -
抖音上滑下拉测试
-
你期望的测试工作是什么样的
-
一个链表中删除一个值返回这个链表
参考 -
一个界面老是卡在loading的原因可能是什么
-
单例设计模式
详细介绍参考饿汉式:三步走,创建时直接实例化
懒汉式:修改上面 -
JVM加载过程
加载-----连接(验证;准备;解析)-----初始化
下面的参考是具体的理解:
JVM分为三个区:栈;堆;方法区
java栈中程序的运行
java程序运行的完整过程自己理解的堆和方法区:方法区中的字节码文件,作为一个类模板。堆中存放的是new出来的对象,里面是方法区的复制品,对于属性以及变量等参数是对象实例自己的。但是当运行方法的时候,是映射到堆中指向方法区中的方法区运行的。
-
说说你对测开的理解;
参考 -
测试的方法有哪些?
测试的分类 -
多线程同步的方式【线程同步参见50】
java线程同步参考 -
.Mysql索引的类型
参考
主键索引、唯一索引、普通索引、全文索引、组合索引 -
Mysql优化是怎么实现的
-
手撕代码:给一个字符串,找出最长的不重复的子串;
参考 -
测试淘宝加入购物车的功能
-
继承
基础知识理解(1)子类的对象可以调用父类中的(public protected)属性和方法 ,当做自己的来使用
(2)子类可以添加自己独有的属性和方法的。
(3)子类可以重写父类的方法。子类从父类中继承过来的方法不能满足子类需要,可以在子类中重写(覆盖)父类的方法 ,更多指的是内容。
(4)单继承
(5)继承在内存中的存储形式。剥洋葱。
(6)子类中的构造函数中,默认调用了父类的构造函数
参考知识点
参考实例 -
多态的理解
基础知识理解同一个对象, 体现出来的多种不同形态(身份)
-
印象最深的一道编程题,怎么解决的?
-
手撕代码:力扣41 困难难度,缺失的第一个整数
参考 -
测试我们之间面试通话的过程
-
遇到最困难的一件事,怎么解决的
-
算法:返回一棵树的最大叶节点距离
-
网页的缓存技术
好像是web的知识点
-
linux常用命令有哪些,怎样查询出test.log中带error的行
日志参考
cat指令
管道指令
cat -n test.log | grep 'error' 查询日志中含有某个关键字的信息,显示出行号
-
对含有重复数字的数组去重并排序
去重参考可以用hashset么
-
快排
代码参考 -
对算法设计测试用例
参考 -
两个不均匀木棍,烧完时间都是1h,怎么得出15min
参考 -
对黑盒测试和白盒测试的理解
参考 -
算法:两个大数字符串求和输出字符串
-
一个数据库sql查询重复个数
参考select username,count(*) as count from hk_test group by username having count>1;
-
session和cookie区别
Cookie 和 Session都是⽤来跟踪浏览器⽤户身份的会话⽅式,但是两者的应⽤场景不太⼀样。
Cookie ⼀般⽤来保存⽤户信息 ;Session 的主要作⽤就是通过服务端记录⽤户的状态。
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
-
智力题-十堆苹果九堆50g 一堆40g 找这一堆
-
线程池了解吗(没实际使用过)
-
排序算法及时间复杂度,写快排,快排是否稳定
参考
冒泡排序
快排
排序算法稳定性的理解
插入排序法
选择排序算法
堆排序算法 -
最大不重复子串,说思路,时间复杂度
参考 -
状态码,404,502,504,报以上错误的具体原因及问题定位和排查
各类错误代码参考:要看具体的错误码
可能出现错误的原因
5xx错误排查 -
主键外键
主键外键参考
若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
存在于外面的主键就是外键。比如上面成绩表的学号是学生表的外键,成绩表的课程编号是课程表的外键。
主键是唯一的,用于标识一张表。外键可以有多个,用于建立表和表的关系。
-
连接查询
内连接;外连接:左连接,右连接;全连接 -
怎么看索引是否合理
索引类型在哪些列上添加索引比较好:
1.比较频繁的作为查询的字段
2.唯一性太差的字段不适合加索引,要找唯一性比较好的
3.更新太频繁的字段不适合做索引
4.不会出现在where中的 不应该建立索引 -
索引底层结构
参考 -
Linux用的多吗,会什么
-
举个多态的例子,用Java多,那用Java写个多态。
Person和Teacher的类 -
并发编程的三大特性
原子性;可见性;有序性 -
http的请求方法有哪些
Get;Head;Post;Put;Delete;CONNECT;OPTIONS;TRACE;PATCH -
现在有两个表,员工表Employee,存储内容:id, name,dept_id; 部门表Dept, 存储内容:dept_id,dept_name,要求获取员工的id, name, dept_name;
参考
SELECT e.id, e.name, e.class_id, d.dept_name FROM Employee e INNER JOIN Dept d ON e.dept_id= d.dept_id;
-
输入一个字符串,如“127.0.0.1”,判断是否是十进制表示的ipv4地址
-
输入一个数组{1,2,3,2,2,4,4,1};输出数组中数字重复出现的最大次数,写出它的测试用例
注意hashmap的遍历~以及包装类和基本数据类型的拆箱和装箱
-
有两个桶5kg 和11kg,怎样可以装出7kg的水
11g装到5g里,剩余6g
11g装到5g,再装到5g,还剩1g
加到一起一共7g -
拆箱装箱
拆箱装箱参考装箱就是:自动将基本数据类型转换为包装器类型;拆箱就是:自动将包装器类型转换为基本数据类型。
只有double和float的自动装箱代码没有使用缓存,每次都是new 新的对象,其它的6种基本类型都使用了缓存策略。
使用缓存策略是因为,缓存的这些对象都是经常使用到的(如字符、-128至127之间的数字),防止每次自动装箱都创建一次对象的实例。
而double、float是浮点型的,没有特别的热的(经常使用到的)数据的,缓存效果没有其它几种类型使用效率高。Integer.valueOf("")
和Integer.parseInt("")
内部实现是一样的,它们之间唯一的区别就是Integer.valueOf(“”)
返回的是一个Integer对象,而Integer.parseInt(“”)
返回的是一个基本类型的int。 -
用MySQL写出查找user表中在一个时间段内登陆三次的用户id
-
说说springboot各个层怎么交互的
-
说说kafka es
-
数据库的事务了解吗,数据库引擎知道吗
Mysql 中 MyISAM 和 InnoDB 的区别
自己写的引擎参考 -
分析一下订单支付失败的原因
-
代码题:滑动窗口最大值
参考 -
线程安全的实现方式
-
设计聊天框的测试用例
参考 -
表T,列A,B,C,A为主键,C含有重复值,查找C列重复的记录
参考 -
深拷贝浅拷贝
参考浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。
深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。 -
逻辑题:一群人开舞会,每人头上都戴着一顶帽子,帽子只有黑白两种,黑的至少有一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有噼噼啪啪打耳光的声音响起。问有多少人戴着黑帽子?
参考 -
给定一个数组,求和为s的两个元素的组合
-
SQL 增删改查
考察where
考察聚合函数
where和having的区别having:是从前面筛选的字段再筛选,而where是从数据表中的字段直接筛选。
-
为微信红包设计测试用例
参考 -
ARP协议是为了得到吓一跳的mac地址,当发送的数据报肯定还是ip1和ip5,但是当使用ARP协议在进行地址广播的时候,需要注意的是:路由器中会有路由表,会告诉你想要从ip1到ip5经历哪几个ip,假设下一个经历的是ip6,那么ARP协议发送的分组,就是,我要得到ip6的mac地址,然后ip6返回一个mac地址,然后发送数据的时候,发送的是ip1和ip5以及mac地址。
-
路由风暴是什么?如何避免?为什么采用这种方式能避免
广播风暴 -
太网数据包的大小最大为多少?
参考数据链路层:1500
网络层:头部站20字节:最长只能为:1500-20=1480字节
传输层:UDP占8字节:最长只能为:1480-8=1472字节
TCP占20字节:最长只能为:1480-20=1460 -
TCP协议三次握手四次挥手
三次握手过程中是否存在安全问题?描述一下存在什么样的安全问题?针对这样的安全问题如何防御?
简单的三次握手四次挥手五5
更详细具体的介绍!
解决SYN -
tcp可靠传输
参考(1)首先,采用三次握手来建立TCP连接,四次挥手来释放TCP连接,从而保证建立的传输信道是可靠的。
(2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。
(3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。 -
Web攻击有了解过吗?CSRF攻击有了解过吗?
-
TCP如何进行拥塞控制?拥塞控制如何判断发生拥塞?TCP快重传如何判断丢失?
慢开始;拥塞避免;快重传;快恢复拥塞控制如何判断发生拥塞?其根据就是没有按时收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做拥塞来处理.
TCP快重传如何判断丢失?快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。 -
知道timewait和2MSL吗,简单介绍一下?
参考五.5 -
MySQL/Oracle端口号
oracle 默认端口号为:1521 -
简单介绍一下Hadoop的HDFS的基本原理?Hadoop节点分为哪几类?分布式不了解。
-
Java集合类中你了解哪些数据结构?这些结构有什么特点,适用于什么场景?
常用集合参考
HashSet和TreeSet区别
Collection Map
存储的都是value 存储的是以key-value形式存在
List Set
有序可重复 无序无重复 key无需无重复 value无需可重复
List:ArrayList; Vector;. LinkedList; Stack;Queue;
Set:HashSet; TreeSet; LinkedHashSet
Map:HashMap; Hashtable; TreeMap
-
你刚刚提到的几个结构哪些是线程安全的,哪些是非线程安全的?非线程安全的结构如果想实现线程安全怎么做?
哪些安全,哪些不安全
对于不安全的集合处理方式 -
代码题:两个字符串求最长公共子串
-
Java垃圾回收有哪些算法?【参考31题】分代收集算法工作原理是什么样的呢?
标记清除算法;复制算法;标记整理算法;分代收集算法
-
操作系统了解吗?什么是Linux用户态和内核态?
为什么区分内核态和用户态
内核态和用户态其他方面知识 -
微信发送图片的功能进行测试
参考 -
为抖音的评论功能设计测试用例
-
字符串变形。“Hello World"变形后就变成了"wORLD hELLO”
参考 -
容器盛水问题
-
Lock和synchronized区别
-
for和for each区别:
for和for each区别
for和for each区别在ArrayList和LinkedList中的应用
Random Access接口
for、foreach和Iterator遍历foreach循环是利用迭代器的使用循环。
foreach适用于只是进行集合或数组遍历,for则在较复杂的循环中效率更高。
foreach不能对数组或集合进行修改(添加删除操作),如果想要修改就要用for循环。