字节后端凉了,实在太菜......

字节后端凉了,实在太菜......
最新回答
雨后初见彩虹

2023-11-15 06:38:27

字节后端面试未通过不代表个人能力差,面试表现受多方面因素影响,且面试中考察的知识点可通过针对性学习掌握。以下是对面试涉及知识点的详细分析:

一面知识点
  • 实习与项目拷问:面试官通过询问实习经历并深入拷打项目细节,如是否了解正规规则引擎,考察实际项目经验和知识深度。这要求求职者在实习或项目中不仅要参与,更要深入理解项目所涉及的技术和原理。
  • 浏览器键入网址全过程:涉及网络通信、DNS解析、TCP连接、HTTP请求等多个网络和计算机基础知识。从浏览器输入网址开始,到最终页面展示,每个环节都有其特定的作用和流程,需要求职者对网络通信原理有清晰的认识。
  • http无状态原因:HTTP协议本身设计为无状态,即每次请求都是独立的,服务器不会保存客户端的任何信息。这有助于提高服务器的性能和可扩展性,但也带来了一些挑战,如需要额外的机制来实现用户会话管理。
  • 死锁条件

    互斥条件:至少有一个资源被标记为只能被一个进程占用,即一次只能有一个进程使用该资源。

    请求与保持条件:一个进程在持有至少一个资源的同时,又请求其他进程占用的资源。

    不可剥夺条件:已经分配给一个进程的资源不能被强制性地剥夺,只能由持有该资源的进程主动释放。

    循环等待条件:存在一个进程资源的循环链,每个进程都在等待下一个进程所占用的资源。当这四个条件同时满足时,就可能发生死锁。

  • 子网掩码作用

    确定网络地址:子网掩码通过将IP地址中的网络部分与主机部分进行分隔,将网络地址和主机地址进行划分。子网掩码中的1表示网络部分,0表示主机部分。通过与IP地址进行逻辑与运算,可以得到网络地址。

    确定主机地址范围:子网掩码中的0表示主机部分,确定了主机地址的范围。主机地址范围是指在同一个网络中可以分配给主机的不同IP地址。子网掩码中主机部分的位数决定了主机地址的数量,可以根据主机地址范围来分配IP地址给不同的主机。

  • mysql b+树和b树

    B树:是一种平衡多路搜索树,每个节点可以存储多个关键字和对应的数据指针。节点分为内部节点和叶子节点,内部节点存储关键字和指向子节点的指针,叶子节点存储关键字和对应的数据指针。所有叶子节点都在同一层级上,通过内部节点的指针可以快速定位到叶子节点,适用于磁盘存储等场景,可减少磁盘I/O次数,提高检索效率。

    B+树:在B树的基础上改进,所有关键字都存储在叶子节点上,内部节点只存储关键字和指向子节点的指针。叶子节点之间通过指针连接形成有序链表,可支持范围查询和顺序遍历。内部节点相对较小,能存储更多关键字,减少树的高度,提高检索效率,常用于数据库索引的实现,支持高效的范围查询和排序操作。

  • redis数据结构实现延迟消息队列:可使用有序集合(Sorted Set)结构存储消息,将消息执行时间作为分数,消息内容作为成员,按分数排序。通过定时任务或轮询方式检查有序集合中的消息,当消息执行时间到达时,取出消息处理。具体实现可使用Redis的ZADD命令添加消息,ZRANGEBYSCORE命令获取需执行的消息,ZREM命令删除已执行的消息。
  • redis分片集群

    分片方式:将数据按照一定规则(如哈希算法)分配到不同节点上,每个节点负责存储和处理一部分数据。

    好处

    扩展性:增加节点可线性扩展集群存储和处理能力,提高系统吞吐量和并发性能。

    负载均衡:数据分散存储在多个节点上,均衡每个节点负载,避免单个节点成为瓶颈,提高系统稳定性和可用性。

    容错性:某个节点故障或宕机时,其他节点仍可继续提供服务,保证系统可靠性和持久性。

    高可用性:通过复制机制,每个分片有多个副本,主节点故障时可自动切换到备用节点,实现高可用性。

  • jvm内存分布与垃圾回收

    内存分布

    方法区:存储类的结构信息,如类的字段、方法、常量池等。JDK 8及之前称为“永久代”,JDK 8及之后改为使用元空间(Metaspace)存储。

    :存储对象实例,是Java程序中最大的一块内存区域,被所有线程共享。堆被划分为新生代(Young Generation)和老年代(Old Generation)两部分,新生代又分为Eden空间和两个Survivor空间。

    虚拟机栈:每个线程运行时创建一个栈,存储局部变量、方法参数、返回值等。栈中的每个栈帧对应一个方法调用,包括方法的局部变量表、操作数栈、动态链接、方法返回地址等。

    本地方法栈:与虚拟机栈类似,但用于执行本地方法(Native Method)。

    程序计数器:记录当前线程执行的字节码指令的地址。

    垃圾回收区域:主要发生在堆和方法区(或元空间)中。堆中垃圾回收器自动回收不再被引用的对象,释放内存空间;方法区(或元空间)中主要针对无用的类和常量进行回收。不同垃圾回收器工作方式和策略不同,如串行回收器、并行回收器、并发回收器等。

  • spring的aop实现

    实现方式

    基于代理的经典AOP

    JDK动态代理:基于接口的代理,通过java.lang.reflect.Proxy类和InvocationHandler接口实现。Spring使用JDK动态代理来代理实现了接口的目标对象。

    CGLIB动态代理:基于继承的代理,通过CGLIB库生成目标对象的子类来实现代理。Spring使用CGLIB动态代理来代理没有实现接口的目标对象。

    基于字节码的AspectJ AOP:AspectJ是一个独立的AOP框架,提供更强大和灵活的AOP功能。Spring可集成AspectJ,使用AspectJ注解或XML配置定义切面和切点,然后通过编译时或运行时的织入方式将切面织入到目标对象中。

    工作原理:在Spring中,通过配置文件或注解定义切面和切点,使用AOP代理将切面织入到目标对象的方法中。当目标对象方法被调用时,AOP代理在方法执行前、执行后或抛出异常时执行切面相关逻辑,实现横切关注点功能,如日志记录、事务管理等。

二面知识点
  • 判断字符串四种括号是否合法:考察编程能力和对数据结构的运用,需使用栈等数据结构来判断括号是否匹配。
  • sql题:考察数据库查询能力,包括对SQL语句的掌握和数据库查询逻辑的理解。
  • Linux命令查找IP:使用grep命令结合正则表达式在log文件中查找所有IP,如grep -oE "([0-9]{1,3}.){3}[0-9]{1,3}" logfile。该命令中,-o选项表示只输出匹配到的内容,而不是整行;-E选项表示使用扩展的正则表达式;[0-9]{1,3}表示匹配1到3位数字;.表示匹配点号。
  • 线程安全单例模式:可使用双重检查锁定(Double-Checked Locking)实现线程安全的单例模式。关键点在于使用volatile关键字保证可见性,确保多线程环境下对instance的正确访问。在getInstance()方法中,先检查instance是否已被实例化,若未实例化则进入同步块,在同步块内部再次检查instance是否为null,若为null则创建新实例。
  • redis过期删除和内存淘汰策略

    过期删除:Redis使用过期删除策略处理过期键,当一个键的过期时间到达时,Redis会在键被访问时检查它是否过期,并在访问时删除过期的键。这种方式确保了过期键在被访问时被删除,但可能导致一些性能开销。

    内存淘汰策略:当Redis内存使用达到上限时,需要淘汰一些键释放内存空间。常见内存淘汰策略有LRU(Least Recently Used,淘汰最近最少使用的键)、LFU(Least Frequently Used,淘汰最不经常使用的键)、Random(随机选择要淘汰的键)、TTL(Time To Live,淘汰具有最早过期时间的键)。可通过配置Redis的maxmemory-policy参数选择所需内存淘汰策略,默认情况下Redis使用noeviction策略,即不淘汰任何键,当内存使用达到上限时,写操作会报错。