/images/avatar.jpg

我的个人博客

🍏2021-4-13 ,美团实习一面 时长1小时20分钟 没有自我介绍,上来直接开问 项目介绍 –>有什么难点,采用了什么解决方法 python中常用的一些库 java和python有什么区别 hashmap的底层数据结构 hashmap进行put的时候可以覆盖吗 –>可以,如果key相同,会将value进行覆盖 hashmap的扩容机制,为什么要将链表转换为树,有什么好处 遍历一棵树的复杂度是多少 hashmap中数组的长度为什么是2的幂次,有什么好处–>没有回答上来,面试官一顿解释,没听懂😅 hashmap是线程安全的吗;有什么线程安全的实现(回答的hashtable) hashtable如何实现线程安全(回答通过锁进行) 通过哪个关键字实现的(回答的是synchronized) 聊一聊synchronized;对应的JVM底层原理 –>没有回答上来 聊一聊volatile关键字 ConcurrentHashMap是怎么实现的–>回答通过通过分段锁 –>继续追问具体的实现原理,没回答上来 对集合了解吗,聊一聊LinkedList,LinkedList既可以在头节点又可以在尾节点插入吗 对JVM了不了解,介绍一下JVM的内存区域 多线程中的程序计数器有几个(应该有多个–>回答的不好) 如何判断对象是否存活 哪些可以作为GC Roots 垃圾回收算法,各自的优缺点 对不同的区域应该采用什么样的垃圾回收算法 常见的垃圾回收器都采用了什么样的垃圾回收算法 –>没有回答上来 介绍进程和线程 运行一个服务器,启动的是进程还是线程 –>进程 TCP和UDP的区别 TCP三次挥手和四次握手–>每一次通信过程中的发送的标记要说请;为什么握手要三次,为什么挥手要四次 计算机协议分为几层 物理层和数据链路层的区别 http和https的区别 对Linux有没有了解 –>回答项目都是在ubuntu上操作的。并没有继续追问 算法题,合并两个有序数组 –>先跟面试官说了以下自己的想法,最后面试官还进行了提示 介绍自己在学习方法,在学习中遇到难题是怎么解决的 有准备算法方面的吗?刷了几道题 以后是继续做后端开发还是准备做算法方面的工作 反问环节:1.部门主要是做什么的。2.有什么学习的建议 –>项目欠缺,要好好完善自己的项目,公司更希望招具有经验的人//JVM调优 🐱‍🚀小结:①项目经验太欠缺了,应该通过项目来锻炼自己。②多线程的部分应该要好好的补一补,比如常见的一些关键字,底层原理。③JVM调优的部分要好好补一补 🍏2021-4-21 ,美团实习二面,40min 自我介绍,背景,项目的难点,采用的解决方法 项目 计算机组成原理 面向接口编程 对象的存储 手撕快速排序 数据结构和算法,讲一讲堆排序 🍏2021-4-22 ,美的实习一面,30min 自我介绍 项目介绍 聊一聊TCP中的滑动窗口 TCP和UDP的区别,如何实现UDP的可靠传输 聊一聊B树和B+树,B+树在MySQL中的优点;在什么情况下B树比B+树的效率高 聊一聊自平衡二叉树和红黑树 聊一聊自己的职业规划 反问环节 🍏2021-4-28 ,腾讯音乐实习一面,60min

MySQL

基本结构 基本概念 事务 事务是一种机制,用来管理必须成批执行DML语句(insert,update,delete)(对表的数据进行增删改). 利用事务处理,可以保证一组操作要么作为整体执行,要么不执行。 如果没有错误发生,则将整组语句提交给数据库表。如果发生错误,则回退以恢复数据库到某种安全的状态 管理事务处理的关键在于将SQL语句组分为逻辑块,并明确规定数据何时应该回退,何时不应该回退 常见术语: 事务(transaction):一组SQL语句 回退(rollback):指撤销指定SQL语句的过程;rollback只能在一个事务处理内使用(在执行一条start transaction;命令后) 提交(commit):指将未存储的SQL语句结果写入数据库表;在事务中提交不会隐式执行,需要使用commit明确执行 保留点(savepoint):指事务处理中的临时占位符,你可以对它发布回退 1 2 3 4 5 6 7 8 select * from orders; #显示该表不为空 start transaction; #开始事务 delete from orders; #删除表中所有行 select * from orders; #显示该表为空 rollback; #回退到start transaction之后的所有语句 -->即delete from orders;select * from orders;这两条语句被撤销了 select * from orders; #显示该表不为空 #最终的结果是该表不为空 1 2 3 4 start transaction;#开始事务 delete from orders where order_num=200;#删除表中某一行 delete from orders where order_num=500;#删除表中某一行 commit;#提交;只有当两个删除语句都执行成功,才会对表进行更改,如果存在一个语句执行不成功,那么所有删除语句都不会执行; 1 2 savepoint delete1;#创建保留点 rollback to delete1;#回退到保留点 事务的隔离级别 参考

排序算法

排序的稳定性 稳定性指的是对于序列中相同元素,经过排序后, 其前后位置并没有发生改变,则为稳定排序,否则不稳定。 冒泡排序 两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。 初级版本 每一个位置的数字,都与比它的下标大的数字进行比较(从前往后比较)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 public class bean2 { public static void main(String[] args) { int[] nums={9,1,5,8,3,7,4,6,2}; Solution solution=new Solution(); System.out.println(Arrays.toString(solution.sort(nums))); } } class Solution{ public int[] sort(int[] nums){ for (int i=0;i<nums.length;i++){ for(int j=i+1;j< nums.length;j++){ if (nums[i]>nums[j]){ swap(i,j,nums); } } } return nums; } private void swap(int a,int b,int[] nums){//交换数组下标为a,b的两个数 int temp=nums[a]; nums[a]=nums[b]; nums[b]=temp; } } 冒泡排序 将最小值依次从底端交换到顶端,这一过程形象的称为冒泡排序

设计模式

什么是设计模式 设计模式是软件设计中常见问题的典型解决方案。 每个设计模式就像是一张蓝图,你可以对其进行定制来解决代码中的特定设计问题。 设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。 模式并不是一段特定的代码, 而是解决特定问题的一般性概念。 你可以根据模式来实现符合自己程序实际所需的解决方案。 模式是针对软件设计中常见问题的解 决方案工具箱, 它们定义了一种让你的团队能更高效沟通的通用语言。 简单工厂方法 定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //定义一个接口 public interface Product { } //CreateProduct1,CreateProduct2,CreateProduct3都是接口的实现类 class CreateProduct1 implements Product{ } class CreateProduct2 implements Product{ } class CreateProduct3 implements Product{ } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //定义简单工厂类 //可以通过参数(type)的选择返回不同的实例(CreateProduct1,CreateProduct2,CreateProduct3) public class SampleFactoryMode { public Product creatrProduct(int type){ if (type==1){ return new CreateProduct1(); } else if(type==2){ return new CreateProduct2(); } else { return new CreateProduct3(); } } } 1 2 3 4 5 6 7 //主方法通过直接调用简单工厂类,来得到不同的实例(通过不同的参数),而不需要知道实例中的具体实现 public class main { public static void main(String[] args) { SampleFactoryMode sampleFactoryMode=new SampleFactoryMode(); Product product=sampleFactoryMode.