计算机基础知识


高楼平地起

资料

  • 王道程序员面试宝典

    技术问题

  • 进程与线程的区别
    • 回答
  • 常用的数据结构
    • hashmap以及如何解决冲突
    • 红黑树以及平衡搜索树
  • 多线程实现方式
  • 线程冲突是什么、怎么解决
  • TCP三次握手细节
  • 海量数据排序(分治)
  • hadoop的灾难处理机制
  • hadoop一个节点数据量太大拖垮reduce,怎么办,Hadoop本身的处理机制是怎么样的,手工的话可以怎么调
  • hadoop数据倾斜问题如何解决
  • 什么是内存泄漏
    • 分配的内存没有被释放。

设计模式

  • 单例模式
    • Ⅰ 懒汉式-线程不安全
    • Ⅱ 饿汉式-线程安全
      • 但是直接实例化的方式也丢失了延迟实例化带来的节约资源的好处。
    • Ⅲ 懒汉式-线程安全
    • Ⅳ 双重校验锁-线程安全
      • 为什么要加volatile?
        • 但是由于 JVM 具有指令重排的特性,执行顺序有可能变成 1>3>2。指令重排在单线程环境下不会出现问题,但是在多线程环境下会导致一个线程获得还没有初始化的实例。例如,线程 T1 执行了 1 和 3,此时 T2 调用 getUniqueInstance() 后发现 uniqueInstance 不为空,因此返回 uniqueInstance,但此时 uniqueInstance 还未被初始化。
    • Ⅴ 静态内部类实现

数据库

  • 数据库隔离级别?
    • 事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离型(Isolation)、持久性(Durability),简称ACID。隔离型(Isolation) 事务的隔离型是指并发的事务相互隔离,不能互相干扰。 事务的四个隔离级别 实际工作中事务几乎都是并发的,完全做到互相之间不干扰会严重牺牲性能,为了平衡隔离型和性能,SQL92规范定义了四个事务隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable)。四个级别逐渐增强,每个级别解决上个级别的一个问题。
    • Oracle支持两种隔离级别,READ COMMITED和SERIALIZABLE默认的事务隔离级别是READ COMMITED
      • MYSQL支持4中隔离界别,默认的是REPEATED READ
      • 读未提交(Read Uncommitted) 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)。 脏读是指另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据。
      • 读已提交(Read Committed) 本事务读取到的是最新的数据(其他事务提交后的)。问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不可重复读)。
      • 不可重复读是指同一个事务执行过程中,另外一个事务提交了新数据,因此本事务先后两次读到的数据结果会不一致。
      • 可重复读(Repeatable Read) 在同一个事务里,SELECT的结果是事务开始时间点的状态,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象。
      • 可重复读保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。但是,如果另一个事务同时提交了新数据,本事务再更新时,就会发现了这些新数据,貌似之前读到的数据是幻觉,这就是幻读。
      • 串行化(Serializable) 所有事务只能一个接一个串行执行,不能并发。

网络

语言

  • Python
  • Python 的装饰器是什么
  • 什么是闭包
  • 说说 Tornado 的架构
  • 说说 flask 的架构
  • Python 的生成器是什么?底层怎么实现
  • 算法
  • 了解哪几种排序方式?有没有 O(n) 的排序
  • 平衡二叉树的插入
  • 二叉查找树
  • 10个 G 的最高访问 Ip 统计
  • 倒排索引
  • 常用缓存置换算法
  • Lru 算法的实现及优化
  • 堆和栈的区别
  • 常用 hash 算法
  • md5、sha1 的实现
  • 一万个 url 的快速查找
  • 两个有序数组找并集的优化
  • 10亿个整数中找最大的 100 个,用 O(n)
  • 网络
  • HTTP 和 TCP 有什么关系
  • TCP 的三次握手过程
  • TCP 和 UDP 的区别
  • TCP 包为什么需要 Seq
  • 包为什么会乱序
  • 说说 HTTP 协议
  • HTTP 1.0 和 HTTP 1.1 的差别
  • HTTP 头部有哪些字段
  • 为什么 HTTP 是无连接的
  • 有没有保持长连接的 HTTP
  • TCP 的拥塞控制是怎样的
  • TCP 中客户端发送 SYN 后客户端和服务器分别处在什么状态
  • 服务器调用 send 后返回发送数据大小,是否可以认为客户端已收到?如何确保客户端收到数据
  • 304 状态码的意义?在 HTTP 协议中的实现
  • 如何判断服务器文件是否已修改?知道浏览器缓存的文件与服务器文件不一致?在 HTTP 中哪个字段
  • A 类地址和 B 类地址的区别
  • 局域网没有 ip 时如何通信?如何得知 mac 地址
  • tcp ip 层的意义?
  • 进程 accept 时在哪里取得套接字
  • 什么是网络虚拟化
  • vpn 工作原理
  • TCP 对网络拥堵的判断
  • TCP 几种拥塞机制的重传机制
  • 系统
  • 指针对应的地址是不是物理地址
  • 物理地址和虚拟地址通常叫做什么?缩写是什么
  • 操作系统的寻址方式
  • linux 中如何计算可用内存
  • linux 中如何用 top 命令中查看虚地址和实地址的信息
  • 如何用搜索引擎去了解 top 中的虚地址?不用搜索引擎怎么知道
  • top 的输出中哪些是表明了内存
  • 根据 top 计算可用内存有多少
  • 用 top 看耗性能的线程
  • 还有哪些命令可以找出性能瓶颈
  • epoll 与 select 比较
  • epoll 的缺点,如何克服缺点
  • epoll 机制中文件描述符就绪时如何从内核态通知到用户态的进程
  • epoll 实现
  • 说说同步 异步的区别
  • 进程间通信的方式
  • 进程间的通信有哪些机制?在资源内存方面比较如何
  • 同一进程线程间的通信;不同进程线程间的通信;
  • 如何判断系统在哪些地方耗费性能
  • cpu 调度的单位是什么
  • 如何让多核 cpu 更好的利用资源
  • 什么是缺页
  • 如何控制两个进程对一个数据的访问?怎么处理加锁问题
  • 说一说协程
  • 是否了解 netstat
  • 在 shell 中用 ./a.out wc- l 结果是多少?管道的输入是哪个进程的
  • 谈谈 Linux 的文件权限。让只有拥有者才能读写?让拥有者只能读和执行? 删除文件需要什么权限
  • 假如一个进程在对文件进行读写,管理员把文件删除了怎么办
  • 协程与进程线程比较有什么优势
  • 计算机从电源加载开始的启动过程
  • 什么是中断调用?中断程序的分类
  • lsof strace ptrace gdb 使用
  • 内核态和用户态的区别
  • 为什么需要内核态
  • 什么时候进入内核态
  • 多线程需要加锁的变量
  • 程序在内存中的布局
  • 后端组件
  • memcached 的内存设计
  • 有哪些服务器模型
  • tinyhttpd 的基本工作流程
  • cgi 程序是什么?fastcgi 等等
  • Apache 和 nginx 中分别如何添加一个网站的访问?如何限制 ip
  • apache 和 nginx 的不同在哪里
  • nginx 和 apache 的架构分别是怎样的
  • memcached 和 redis 的差别是什么
  • 简述 redis 的几个操作
  • 知不知道进程池?有没有用过
  • redis 的用什么实现持久化?redis 的持久化是否能够信任
  • memcached 和 redis 为什么不能作为常用数据库
  • tinyhttpd 中对 HTTP 请求的处理
  • 内存池对不同大小数据结构怎么存储
  • RPC 有哪几种实现方式?如何提供接口调用
  • RPC 调用中同步、异步、阻塞、非阻塞的区别
  • Web
  • cookie 和 session 的区别
  • get 与 post 的区别?访问安全性是否有区别?如何做到真正的访问安全
  • 如果发现网络不能访问会检查哪些方面?如果只有某个网站不能访问
  • 没有登陆后台的情况猜测服务器挂掉会是什么原因?如果你是网站管理员用户反馈你的网站不能访问应该怎么做
  • 在后台发现运行程序卡时应该怎么做?检查哪些方面
  • 介绍 HTTPS。能否截获 HTTPS 的数据包
  • 数据库
  • 数据库之间如何同步
  • 怎么保证数据库同时操作几个表的一致性
  • 怎么保证主从服务器中数据库的同步
  • 数据库 ACID 是什么
  • 关系型数据库和非关系型数据库的区别
  • MySQL 的锁的类型
  • 什么时候 MySQL 会对表上锁?对一行上锁
  • 行级锁、表级锁的区别
  • 高并发访问 MYSQL 时,如何保持数据一致性
  • MySQL 有哪些存储引擎?为什么使用 InnoDB
  • MySQL 如何建立索引
  • 建立 A 列和 B 列的索引需要考虑什么
  • 数据库查询过慢的优化
  • 索引实现机制
  • 大数据,高并发
  • 如何设计一个高性能服务器架构
  • 在集群之间做缓存,一个节点挂了怎么办
  • 集群中 session 的同步
  • 集群之间的消息队列
  • 在集群之间做缓存,一个节点挂了怎么办
  • 有哪些高并发的服务器设计
  • I/O 复用模型有哪些
  • select 和 epoll 的区别
  • 秒杀中多个数据库服务器的同步
  • 抢票系统怎么做?
  • 设计 qq 对应所有属性的存储和访问
  • 什么是负载均衡?负载均衡的实现
  • 前端
  • 网页中的 js 事件
  • $( function(){ } ) 是什么意思?和 window.onload 什么区别
  • 用两句话概括 BootStrap
  • 用两句话概括 Jquery
  • Docker
  • (因自己做过 docker 相关)
  •  
  • Docker 的适用场景
  • 什么是无状态应用
  • Docker 分层镜像机制
  • Go 与 C++ 设计比较,优缺点是什么
  • Go 的 import 机制优缺点
  • cgroup 原理
  • 为什么要把项目 docker 化
  • 为什么需要资源隔离和虚拟化
  • 其他
  • 介绍 MVC 模式
  • SVM 原理
  • Java 内存回收机制
  • 字节和字符的区别
  • 什么时候用字符读文件,什么时候用字节读文件
  • 写过的最难的程序是什么
  • 成就感最大的项目
  • 单例模式如何实现
  • 中文的编码有哪些
  • XSS 攻击?举例说明 SQL 注入
  • 7 个工人 7 小时挖了 7 米的洞,50 小时挖 50 米的洞需要多少人?