java基础google面经

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

需要资料和视频的小伙伴可以在回复区留言

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值