imooc教学之笔记
文章目录
笔试
操作系统
进程和线程
面试官根据你说的,了解到你的侧重点,然后在展开
进程相当于一个容器,PC:program counter,TLS:Threading local storage
寻址
网络
网络传输:
不可靠
1.丢包,重复包 办法:??
2.出错
3.乱序
不安全
1.中间人攻击
2.窃取
3.篡改
4.csrf,xss
滑动窗口机制
tcp传输的可靠保障
1.TCP协议中使用
2.维持发送方/接收方的缓冲区
例题
数据库
语句
1.join
2.group by
事物
特性:ACID
隔离界别:
1.read uncommitted
2.read committed
3.Repeated reads
4.serializable
乐观锁 : 应用冲突少的情况
1.读取数据,记录timestamp
2.修改数据
3.检查和提交数据
面向对象
对象与类
类的特殊函数
1.构造函数
2.equals
3.hashCode
4.toString
hashCode主要应用与hashSet,hashMap,hashTable中,
首先将对象放入这些容器中,hashCode能一下子定位到存放该对象的物理位置上,先比较hashCode是否相等,若相等,在比较equals是否相等,这样能降低对象比较次数,提升容器存放对象的效率。
相等(相同)的对象必须具有相等的哈希码(或者散列码)。
如果两个对象的hashCode相同,它们并不一定相同(equals比较)。
接口和抽象类
使用接口的原因:
1.从用户角度看问题
2.强调合约
3.强制双方无法犯错
抽象类:
- 可以有成员变量
- 可以有部分实现
- 不可以多重继承
接口和抽象类是两个不同纬度的东西,抽象类侧重与实现
实现iterable接口
继承与封装
- is-a关系(汽车是交通工具)
- 子类增加或修改基类(增加成员变量,函数)
- Java中所有函数都相当于C++虚函数
不可变对象 immutable Objects
- 可以引用传递
- 可以缓存
final 关键字
- 类声明 -> 类不可以被继承
- 函数申明 -> 函数不可以在派生类中重写
- 变量申明 -> 变量不可以指向其它对象
- static final 变量 -> 用于定义常量,名称一般大写
实现不可变:
- final关键字无法保证不可变
- 从接口定义,类的实现上保证不可变性
- Collections.unmodifiableXXXX
泛型
设计模式
Singleton:确保全局只有一个对象
优点:构造缓慢的对象,需要统一管理的资源
缺点:很多全局状态,线程安全性
变继承为组合
装饰器
如何创建对象
使用new创建的缺点
- 编译时必须确定创建哪个类的对象
- 参数意义不明确
高级知识点
并行计算
方法:
1.将数据拆分到每个节点
2.每个节点并行计算出结果
3.将结果汇总
死锁
线程池
创建线程开销大,所以使用线程池
线程池优点:预先建立好线程,有任务,能立即派发
线程池的参数
- corePoolSize :线程池中初始线程数量,可能处于等待状态
- maximumPoolSize :线程池中最大允许线程数量
- keepAliveTime :超出corePoolSize部分线程如果等待这些时间将被回收
资源管理
Java垃圾回收
- 不被引用的对象会被回收
- 垃圾回收包括Minor GC和Full GC
- 垃圾回收时所有运行暂停