腾讯云智Timeline

4.23 投递简历 5.7 笔试 5.15 一面 当天更新状态 5.20 二面 当天更新状态 5.21 三面(HR面) 5.23 OC

一面

一面完感觉自己要挂了,问的场景题居多,而且感觉面试官心情不太好,声音低沉,但最后给过了。 1.如果让你插入100万的数据,选择什么数据结构比较好一点? 分析各种数据结构的优缺点。 2.微服务架构中,如果让你设计一个注册中心,你会怎么样设计 可能是因为我项目经历中有些微服务相关的。说了服务注册、服务拉取、心跳检测、集群、数据一致性相关的内容 3.如果你的注册中心中,某一个服务实例宕机了,如何解决宕机的问题 又把心跳检测重复了一遍 4.那你心跳检测的时间应该如何设置?如果在间隔时间内,出现了很多失败的请求呢? 面试官大致是这个意思,当时不知道怎么说了,随便往限流熔断方面说了说。 5.分页查询实现的原理是什么?会遇到什么问题? 6.深度分页的问题应该如何解决? (在面试鸭上面背过,但是忘了) 7.如果客户端打开一个页面非常慢,应该如何去分析? 从前端、后端、数据库三个方面说的。 8.说一下函数式编程和面向对象编程的理解 随便说了说面向对象的特征,然后说了一下写前端的时候拿函数式编程很简洁,举了个promise的例子(面试官说看到了有些Lambda表达式,所以问的这个问题) 9.Redis为什么这么快? 吟唱八股。 10.有没有线程池参数设置的经验 推荐线程个数=(cpu执行时间+线程等待时间)/cpu执行时机*CPU核数。说到了cpu密集型和IO密集型。 11.如何判断CPU密集型和IO密集型?说几个应用场景 懵逼了,举了个电商高并发的例子,然后随便说了几句。 12.给你一个英雄 一个武器 一个怪兽 如何去设计类 也有点懵,说了一下继承和接口。后面面试官还问如果有多个英雄、多把武器、多个怪兽呢。

二面

二面比较常规,一些场景题,一些常规八股,算法是有效括号。 1.Java中的hash比较常用,请你说说发生哈希冲突的原因以及解决方案 吟唱八股。

2.你也提到了一些解决哈希冲突的方法,你认为他们几种方法使用的场景是什么? 从时间复杂度和空间复杂度对不同的方法分析了一下。

3.对于hash还有什么要补充的吗? 说了一下自己的观点,我认为hashmap这种数据结构创建的一个目的就是以O(1)的时间复杂度去查询某个key对应的value,如果下标对应的链表中存储的数据太多的话,那查询的时间复杂度就会到达O(n)级别,或者O(logn),那这样就和我们hashmap的设计理念相违背了。本质上还是时间复杂度和空间复杂度无法兼得 4.现在我们有一个日志文件,记录了所有客户端请求的相关信息(比如说ip地址 端口号 url等),那我们如何统计出来访问我们网页前N的用户。

5.网页上输入一个url地址执行的全过程,越详细越好。 吟唱八股。

6.问了一些mysql的常规八股 吟唱八股。

其他问题有点忘了。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
如何呢
作者分享
AI零代码应用生成《第四期》总结!
4
如何选择呢??先说一下我自身的一个情况,目前是大三学生,前端掌握vue、react框架,独立开发没什么问题,但是如果要用css美化页面可能会很吃力;然后后端就是Java开发。然后目前有两个选择。 第一个是游戏公司,base上海,开发内容:后端需要使用NodeJs写一些比较简单的接口,前端会用框架进行开发,可能还涉及到根据psd设计页面。和自己学的专业不太对口。 第二个是一个外包,base北京,开发内容和掌握的技术栈完全对口。薪资待遇会比第一个公司要好。 现在困扰我的点就是:选择第一个的话,公司比较有名气,可能会有点说服力,但是产出成果感觉不是太多;选择第二个的话,实习经历中可能不太亮眼,因为是一个外包公司,但是实习产出成果会更好。
4
分片上传、断点上传
7
今天学习了JVM的一些内容,还是有难度的,面试鸭上面没找到对象的创建过程,那就在这默写一下对象的创建过程,以及类的加载过程吧! 一、对象的创建过程 1.当我们遇到new关键字、反射、或者初始化父类等情况时,就要执行对象的创建过程,首先根据对象的全限定类名去常量池中寻找符号引用,然后需要检查这个符号引用代表的类有没有被加载过(类加载器会维护一个已经加载过的类),如果没有的话,就需要进行类的加载过程,如果有的话就可以直接获取到类的直接引用。(类的加载过程在下面写) 2.类加载检查(这一步可以确保我们的类已经被加载到方法区中了)完成之后,JVM就会在堆内存中给对象分配内存,一般是在Eden区域中。 2.1然后这里分配内存的方式有两种,一种是指针碰撞,另一种是空闲列表。可能从名字上我们看不出来这两种的区别是什么,但实际上这两种内存的分配方式是根据堆内存是否规整来决定的,堆内存是否规整和我们的垃圾回收算法有关系(标记复制/标记压缩->没有内存碎片,标记清除->由内存碎片)。 先说一下指针碰撞,应用场景是在内存规整的堆内存中,通过一个指针将数据区和空闲区分隔开,当需要给对象开辟一块内存时,只需要将指针在空闲区移该对象内存大小的距离即可。 再来说空闲列表,JVM会通过一个空闲列表来维护我们可用的内存,应用场景是在内存不规整的堆内存中,当需要给对象开辟一块内存时,需要查找足够大的一个内存块给对象分配内存 2.2 在分配内存的时候,可能还会遇到线程安全问题(可能会存在多个线程同时执行分配内存操作,并且分配到了相同地址的内存上面)。 遇到线程安全问题,应该如何解决呢?有两种办法,第一种就是通过+CAS锁,如果竞争失败就去自旋;第二种是通过TLAB,JVM会预先给每一个线程在Eden区域中分配一定的空间,如果创建的对象需要分配的内存不够之后,在通过cas锁去竞争。 3.内存分配完成之后,需要给对象实例上的属性赋初始值,直接在堆内存中该对象实例的属性上赋值即可。 4.给对象的对象头设置相关信息(JMM对象内存),对象内存模型包括对象头(Mark Word对象标记、类元信息(指针))、实例数据、对齐填充。需要给对象头中的对象标记设置相关的类信息、GC分代年龄等信息,也可以添加偏向锁状态等。 5.执行init方法,对于JVM来说,一个新的对象就已经创建了, 就可以去执行构造参数对该类的属性进行具体赋值了。 二、类的加载过程 类的加载过程(主要分为三个阶段,加载阶段、连接阶段、初始化阶段) 1.加载阶段,根据类的全限定类名,获取到对应的.class字节码文件,然后交给类加载器根据双亲委派机制去加载相应的类信息,并且把类的相关信息存储在方法区中,然后把Classs对象存储在堆内存中,作为访问入口。(在这个阶段还要对class字节码文件的格式进行校验) 2.连接阶段,这个阶段分为三部分,验证、准备、解析。连接阶段顾名思义就是将我们的class字节码文件和JVM运行时环境进行连接。 2.1 验证阶段,要对class字节码文件进行验证,比如说加载阶段中的文件格式的校验、还有元数据的校验(对字节码描述信息做语义分析,并且判断是否继承了xx父类,实现了xx接口)、对字节码的校验(通过对数据流和控制流分析,确保程序不会伤害虚拟机) 2.2 准备阶段,在这个阶段中,会给静态变量分配空间,然后赋默认的初始值(这里会更倾向于分配空间)。如果是被final修饰的static变量,在编译的阶段就已经分配好空间了。 2.3 解析阶段,解析阶段是将运行时常量池中的符号引用解析为直接引用。符号引用一般是通过全限定类名来代替某个对象的具体地址的,然后直接引用是通过指针或者句柄来指向对象在堆中的一个具体地址。比如说类A在加载的过程中,对类B有一个引用,但是只是符号引用,然后就会先让类B进行一个类加载,加载完成之后就可以获取到它在堆内存中存储的地址,然后直接引用即可。 3.初始化阶段,在这个阶段中就是对静态变量进行一个赋值,然后执行静态代码块。
6
OJ判题系统小总结
15
下载 APP