【2023】web后台开发笔试题

目录)

  • 客观题
      • 1.考了关于锁的描述
      • 2.JVM GC
      • 3.数据库存储引擎
      • 4. 17 考察了ping ip所用的协议,以及判断当前tcp连接状态的指令是?
      • 5. 给一段程序判断输出结果
      • 6.用到了反射的地方
      • 7.考了mysql的修改索引
      • 8.考察了ping
      • 9.考察synchronized与lock
      • 10.考察了泛型类
      • 11. 考察了java的对象序列化
      • 12. 考察了mysql Innodb下索引类型说法正确的是?
      • 10 13. 考察了多线程描述
      • 14 考察代码描述正确的是
      • 15 考察JVM的垃圾回收
      • 16 考察类加载中的双亲委派机制

客观题

1.考了关于锁的描述

主要考察的是锁的四种状态和互斥锁跟自旋锁的区别

锁的四种状态
自旋锁和互斥锁的特点:

①自旋锁与互斥锁都是为了实现保护资源共享的机制。

②无论是自旋锁还是互斥锁,在任意时刻,都最多只能有一个保持者。

③获取互斥锁的线程,如果锁已经被占用,则该线程将进入睡眠状态;获取自旋锁的线程则不会睡眠,而是一直循环等待锁释放

2.JVM GC

jdk1.7 默认垃圾收集器Parallel Scavenge(新生代【标记-复制算法】)+Parallel Old(老年代【标记整理算法】)

jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)

jdk1.9 默认垃圾收集器G1【从局部(两个Region之间)来看是基于"标记—复制"算法实现,从整体来看是基于"标记-整理"算法实现】
详细的关于GC的介绍可以读这篇简介文章

3.数据库存储引擎

主要是考察MyISAM和InnoDB,有一点可能会被忽略的InnoDB特性就是,它并不保存表的具体行数,可以看这篇文章

4. 17 考察了ping ip所用的协议,以及判断当前tcp连接状态的指令是?

ping ip地址 具体文章
那么在这一过程中用到了什么协议呢?

  • 首先要明白ping是基于ICMP这个协议的,然后通过DNS协议,将ping后接的域名转换为ip地址。(DNS使用的传输层协议是UDP)
  • 通过ARP解析服务,由ip地址解析出MAC地址,以在数据链路层传输。
  • ping是为了测试另一台主机是否可达,发送一份ICMP回显请求给目标主机,并等待ICMP回显应答。(ICMP用于在ip主机、路由器间传递网络是否通畅、主机是否可达等控制信息)

5. 给一段程序判断输出结果

6.用到了反射的地方

  • Spring 框架的 IOC 基于反射创建对象和设置依赖属性。
  • Spring MVC 的请求调用对应方法,也是通过反射。
  • JDBCClass#forName(String className) 方法,也是使用反射。

7.考了mysql的修改索引

8.考察了ping

主要关注点放在它是基于ICMP协议上即可 具体文章

9.考察synchronized与lock

这篇文章觉得不错,总结的很到位,而且没有废话。补充一点,synchronized锁是可以设置超时时间的,利用wait()和notify()

10.考察了泛型类

要明白,泛型类是在实例化类的时候指明泛型的具体类型;泛型方法是在调用方法的时候指明泛型的具体类型。但是实现泛型接口的类时,并不一定要传入泛型实参;静态方法不可以访问类上定义的泛型,因为静态方法又称为类方法,在类初始化时就要确定下来的,而这时候泛型可能都没确定下来。
这篇文章不错

11. 考察了java的对象序列化

guide哥介绍序列化的这篇文章挺不错的
但是如何维护序列化没有谈到,补充四点:

  • 只修改了类的方法,无需改变serialVersionUID
  • 只修改了类的static变量和使用transient 修饰的实例变量,无需改变serialVersionUID
  • 如果修改了实例变量的类型,例如一个变量原来是int改成了String,则反序列化会失败,需要修改serialVersionUID;
  • 如果删除了类的一些实例变量,可以兼容无需修改;如果给类增加了一些实例变量,可以兼容无需修改,只是反序列化后这些多出来的变量的值都是默认值。
  • 如果某个类的成员变量的类型不是基本类型,而是一个引用类型,那么这个引用类必须是可序列化的,否则拥有该类型成员变量的类也是不可序列化的。

主要是第三点,如果修改了实例变量的类型就要修改版本号好了。

12. 考察了mysql Innodb下索引类型说法正确的是?

10 13. 考察了多线程描述

要明白yield方法的作用是提出释放CPU时间片的请求。不会释放锁,线程依然处于RUNNABLE状态,所以该线程并不需要等待其他线程的唤醒

同时synchronized和volatile均可以保证可见性,但是volatile保证不了原子性,而synchronized可以

volatile和synchronized是多线程最常考的东西,可以看我的这篇文章

14 考察代码描述正确的是

15 考察JVM的垃圾回收

16 考察类加载中的双亲委派机制

双亲委派机制是JVM中的重点,guide哥写的这篇文章挺好的,有兴趣看下

你可能感兴趣的:(笔试刷题,后端)