后端技术面试38讲

内容来自极客时间专栏课

01-程序运行原理:程序是如何运行又是如何崩溃的?

  • 存在磁盘上的代码没有价值, 运行起来才有价值
  • 先要编译
    在这里插入图片描述
  • 堆是无序的内存空间
  • 执行上下文信息
  • 因为CPU的分时共享技术, 可以分时处理进程的信息, 多核架构也可以实现并发.
  • CPU有运行, 就绪, 阻塞状态
  • 当进程在CPU上运行就处于运行状态
  • 当进程获得了除了CPU以外的资源就是CPU就绪状态, 就等他了
  • 服务为什么会变慢?
  • 起线程是在tomcat里面进行的

在这里插入图片描述

  • 多个线程访问的共享资源称为临界区, 需要加锁
  • 解决因高并发导致的响应变慢手段是分布式结构
  • 缓存, 限流, 消息队列, 降级

02-数据结构原理:Hash表的时间复杂度为什么是O(1)?

  • hash表的物理存储是数组
  • 通过对key hash存在数组的位置
  • 但是会有hash冲突, 数组中存储的是数据元素的指针, 虽然有相同的下标, 找到位置之后再遍历链表找到key就可以了

在这里插入图片描述

  • 如果所有的数组下标都冲突就是退化成链表
  • 当对数组链表这种线性结构加上限制就成了栈, 队列
  • 栈和队列都是操作受限的线性表
  • 阻塞队列, 队头阻塞
  • 数组、链表、栈、队列都是线性表,也就是每个数据元素都只有一个前驱,一个后继。而树则是非线性表,树是这样的。
  • 软件开发中,也有很多地方用到树,比如我们要开发一个OA系统,部门的组织结构就是一棵树;我们编写的程序在编译的时候,第一步就是将程序代码生成抽象语法树。传统上树的遍历使用递归的方式,而我个人更喜欢用设计模式中的组合模式进行树的遍历

03-Java虚拟机原理:JVM为什么被称为机器(machine)?

  • JVM的全称是Java Virtual Machine
  • 这样一个程序为什么被称为机器(Machine)呢?
  • 无状态对象, 幂等即使线程不安全也没事
  • JVM更像是一个操作系统, 而且比操作系统更进一步
  • 标记引用是否可达
  • 清理并不是马上都清理的, 但是这不是连续的, 压缩, 复制
  • 回收前:
    在这里插入图片描述
  • 清理:
    在这里插入图片描述
  • 压缩

在这里插入图片描述

  • 复制:

在这里插入图片描述

  • JVM还会采用分代回收, JVM将堆空间分为新生代和老年代, 创建对象只在新生代创建
  • 当经过几次垃圾回收依然存活就会被放到老年代(孤儿院), 当老年代已经满了, 就会触发全量的垃圾回收, fullGC.合理设置新生代和老年代的比例对垃圾回收的性能有重要影响

在这里插入图片描述

  • JVM的垃圾回收器有四种
  • 第一种是Serial 串行垃圾回收器
  • 第二种是Parallel 并行垃圾回收器
  • 第三种CMS 并发垃圾回收器
  • 最后一种是G1 垃圾回收器

它将整个堆空间分成多个子区域,然后在这些子区域上各自独立进行垃圾回收,在回收过程中垃圾回收线程和用户线程也是并发运行。G1综合了以前几种垃圾回收器的优势,适用于各种场景,是未来主要的垃圾回收器。

  • 分治思想
  • StackOverflowError,我们就知道是线程栈空间不足,栈空间不足通常是因为方法调用的层次太多,导致栈帧太多。
  • 执行引擎在执行字节码指令的时候,是解释执行的,也就是每个字节码指令都会被解释成一个底层的CPU指令,但是这样的解释执行效率比较差,JVM对此进行了优化,将频繁执行的代码编译为底层CPU指令存储起来,后面再执行的时候,直接执行编译好的指令,不再解释执行,这就是JVM的即时编译JIT。Web应用程序通常是长时间运行的,使用JIT会有很好的优化效果,可以通过-server参数打开JIT的C2编译器进行优化。

04-网络编程原理:一个字符的互联网之旅

  • 我们现在开发的应用都是互联网应用
  • IP internetProtocol 互联网协议
  • 我们之所以能上网是因为运营服务商为我们提供了互联网服务
  • CDN: 内容分发网络, app请求数据最先到达的是运营商机房, 为了提升访问速度会在运营商机房缓存一些文件
  • TCP只是负责数据都以bit流的形式发给你, 其他什么东西都是上层的HTTP协议干的事
  • 存控制Cache-Control、响应过期时间Expires
  • Content-Length参数声明body的长度。
  • TCP仅仅是一个传输层协议

在这里插入图片描述

  • 应用层、表示层、会话层合并为一个应用层
  • IP协议不是一个可靠的通信协议,并不会确保数据一定送达。要保证通信的稳定可靠,需要传输层协议TCP
  • SYN ACK

在这里插入图片描述

  • TCP是端口

05-文件系统原理:如何用1分钟遍历一个100TB的文件?

  • 数据库文件不是连续存储的, 日志文件则是连续的
  • 盘片 主轴 磁头臂
  • linux的文件信息: inode文件的元数据

在这里插入图片描述

  • RAID磁盘冗余阵列
  • 常用RAID有五种,分别是RAID 0、RAID 1、RAID 10、RAID 5和RAID 6。
  • 分布式文件系统 : HDFS 的NameNode就是Linux的inode

06-数据库原理:为什么PrepareStatement性能更好更安全?

  • PrepareStatement预编译
  • 这种通过非聚簇索引找到主键索引,再通过主键索引找到行记录的过程也被称作回表。

在这里插入图片描述

07-编程语言原理:面向对象编程是编程的终极形态吗?

08-软件设计的方法论:软件为什么要建模?

  • 阿里的工程师在创造一个“500平方公里”的交易市场,百度的工程师在创造一个“一万层楼”的图书馆,新浪微博的工程师在创造“两亿份报纸”,腾讯的工程师在创造“数10亿个聊天茶室和棋牌室”
发布了140 篇原创文章 · 获赞 53 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44291044/article/details/104411599