录取倾向
1.基础知识
2.编程能力
3.交流能力
进程VS线程 :
进程包括:
线程:多个线程
内存:逻辑内存,32位和64位是指操作系统的寻址空间是32还是64,每个进程都有这个2的n次方的空间,的寻址空间。虚拟内存的,都是相互独立的。
PCB 操作系统控制进程的使用
文件/网络句柄
线程:
栈,函数调用,方法局部变量都会放入栈里面
PC指针指向内存里面的溢出,用户区,程序区,的内存。
TLS :线程局部存储(Thread Local Storage,TLS)用来将数据与一个正在执行的指定线程关联起来。
个人理解:
进程是程序分配资源和管理资源的最小单位
线程是程序执行的最小单位
***线程不能独立运行必须依靠进程,线程没有独立的地址空间,但又属于自己的内存块***
**线程是程序多个顺序的流动执行状态**
存储:寄存器,缓存,内存,硬盘(快到慢)
指针----->逻辑内存-------->物理内存(虚拟内存(分页)放到内存)--------->寄存器
页表,段表的实现
网络:7层架构
物理层(数据的传输,物理线路的应用)
数据链路层(数据包,奇偶校验,校验)
网络层(路由转发,Ip协议)
传输层(重传机制,是否发错,tcp,udp协议,建立连接,连接传输)
应用层(HTTP,FTP,HTTPS,电子邮件发送用SMTP,域名的解析用DNS协议)
不可靠:
丢包,重复包
出错
乱序
滑动窗口协议
多个包一起发送,多个包一起接收,对方必须安顺序来ACK,滑动窗口全部发送来,还没有收到ack就重发当前最小顺序的那个包。
TCP三次握手,四次挥手
数据库:
关系型数据库
Join,group by
事物:ACID ;原子性,一致性,隔离性,持久性。
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
事物隔离级别:
Read uncommitted; 不加锁
Read committed; 读加锁
Repeatable Reads 行的读写加锁
Serializable 锁表
乐观锁
通过版本的控制,来进行数据库事物的并发
任何人都放进来,当你需要修改的时候在加以控制
悲观锁
Lock和Synchronized 数据库的锁都是悲观锁
每个进来的线程都加锁,效率变慢。
只是一种思想CAS的实现。
CAS(比较替换)也是版本号的一种。
I/O 流操作会阻塞其他线程(所以增加线程毫无办法)
程序设计
编程过程
编译时检查 运行时检查
运行/编译 c,c++(直接编译为机器语言) java(字节码),C#,(中间代码虚拟机运行)
解释执行(解释器翻译 )
编程范式
面向过成 面向对象,函数式
数据类型
Byte 1字节,short 2字节,int,char,float4字节,double,long 8字节
补码的作用 加减统一 (补码 正数不变,负数符号位不变,其余为取反,加一)
浮点数,定点数 符号位|指数部分|基数部分
a==b 判断对象是否相等
A.equal()调用对象A可能为空 Objects.equals(a,b)来比较
装箱和拆箱
Integer.valueOf(2)==Integer.valueOf(2)---->不确定,相等的时候是系统已经建立这个数的箱子然后分配左边和右边
Integer.valueOf(2) 只有在-128--->127 才会去缓存中寻找,自动生成的箱子New Integer(2)==2 ture 自动装箱拆箱
编码技巧
递归控制-------->循环控制-------->边界控制-------->数据结构
递归控制
链表(单向链表)
容易理解,代码难写
递归链表的创建
递归的开销比较大
数据结构
数组
链表
队列和栈(push,pop)
树(超级重要)
二叉树
搜索树
堆/优先队列
图
无向图
有向图
有向无环图
二叉树的遍历
前序中序后序
根据前序中序构造二叉树
前序第一个就是根节点,然后在中序中找到这个节点,以这个节点分开就是该跟节点的左右节点子树,在根据左右子树递归查找
平衡二叉树:
平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差(平衡因子)的 绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
先便利左子树在便利右子树 就可以判断排除法
算法复杂度 logn就是每次减半
每一次扫描为N,合并为logn
面向对象
静态变量,静态函数属于类不属于某个实例
接口
虚函数表:
接口就相当于interface
封装,继承,多态
设计模式
UML图的含义
它们之间的关系为实现关系,使用带空心箭头的虚线表示;(接口,实现)
它们之间的关系为泛化关系,使用带空心箭头的实线表示(类的继承)
组合关系,使用带实心箭头的实线表示;(类的一部分)
聚合关系,使用带空心箭头的实线表示;(集合是类的一部分)
关联关系,使用一根实线表示;(一对一关系)
依赖关系,使用带箭头的虚线表示;
State 变继承为组合
状态模式
Decorator模式
Component 最原始的抽象类
ConcreateComponent 实现 Component 方法
Decorator 装饰类 实现Component 包含一个Component 对象;
ConcreateDecorator 实现Decorator类 实现方法的时候先加上Component 里面的实现再加上自己的实现
State 和Decorator 都是变继承为组合
创建对象
工厂方法
静态工厂方法代替构造器
优点
1、可读性更强
2、调用的时候,不需要每次都创建一个新对象
3、可以返回原返回类型的任何子类型对象
缺点
1、与其它普通静态方法没有区别,没有明确的标识一个静态方法用于实例化类
2、如果类不含public或protect的构造方法,将不能被继承;
高级知识点(重要)、
并行计算
外部排序
如何排序10G个元素
扩展的归并排序
切分成每块,每块的大小能够放在内存上,在根据每块进行排序,得到一个有序的数组,在进行归并排序。
归并排序(多个节点排序)
堆的数据结构(完全二叉树)
父节点都比子节点小(优先队列) 最小堆
父节点都比子节点大(优先队列) 最大堆
放缓冲区作为(CPU和硬盘的桥梁)
Interable<T>.next 获取下一个数据
多线程
死锁分析
互斥等待
请求与保持条件
不可剥夺
循环
死锁防止
破除hold and Wait 一次性获取所有资源
破除循环 按顺序获取资源
线程池
线程
任务阻塞队列
有一个任务队列(如果队列为空,线程等待,如果队列有任务,分配给空闲的 线程,去完成。如果任务太多就阻塞队列,不允许任务再加入,等完成一部分 任务在允许加入)
参数:
CorePoolSize :线程池中初始线程的数量,可能处于等待
MaximumPoolSize:线程池中允许的最大线程数量(在初始的基础上可以增加到最大数量)
KeepAliveTime:超出corePoolSize的在有限时间内没有活干,就收回这些线程。
Unit 时间的类型
创建线程的方式
实现Runable接口
实现Callable接口,通过FutureTask包装器来创建线程(有返回值)
继承Thread基类 Thread也是实现了runable()接口
使用线程池来创建
任务派发
利用Future检查任结果(是否完成,没有完成就等待)
资源管理
Java垃圾回收机制( GC)
不被引用的对象会被回收
垃圾回收包括minorGC和Full GC
垃圾回收的时候所有的运行暂停
Java资源管理
内存会被回收,资源不会释放
DatabaseConnection需要DatabaseConnection.Close
资源释放Try{}catch{}finally{}
C++析构函数
面试软技巧
自我介绍
目的:破冰(更加熟悉)
结构化表达:面试官感兴趣的地方(深入讲解)
介绍自己核心技术(不要介绍了过多的介绍或者会让自己处于不利的前景)
基础知识:
解题:编码能力,算法能力,解决问题的能力
解决问题 :
面对问题的态度,(遇到难题不要逃避,要尽量的去解决问题),可以聆听面试官的提示,然后在思考是否能够解决问题。
分析的方法:
如何交流:问面试官问题
提问面试官
没什么问题:
介绍您所在的项目组
公司吸引的地方有哪些
对我在下一轮面试有什么建议
面试的结果多久知道
需要资料和视频的小伙伴可以在回复区留言
最后
以上就是敏感乐曲最近收集整理的关于java基础google面经的全部内容,更多相关java基础google面经内容请搜索靠谱客的其他文章。
发表评论 取消回复