Google HR面试基础问题

录取倾向
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.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++析构函数
面试软技巧
自我介绍
目的:破冰(更加熟悉)
结构化表达:面试官感兴趣的地方(深入讲解)
介绍自己核心技术(不要介绍了过多的介绍或者会让自己处于不利的前景)
基础知识:
解题:编码能力,算法能力,解决问题的能力
解决问题 :
面对问题的态度,(遇到难题不要逃避,要尽量的去解决问题),可以聆听面试官的提示,然后在思考是否能够解决问题。
分析的方法:
如何交流:问面试官问题
提问面试官
没什么问题:
介绍您所在的项目组
公司吸引的地方有哪些
对我在下一轮面试有什么建议
面试的结果多久知道

猜你喜欢

转载自blog.csdn.net/lw18781108072/article/details/85196024
今日推荐