JAVA面试题记录
网络协议
UDP协议:无连接通信协议,发送端和接收端不建立逻辑链接,消耗资源少,容易丢包,数据64kb以内(视频聊天,音频会议)。
TCP协议:传输控制协议,通过3次握手建立连接,数据比较安全(文件下载,上传,网页连)。
端口号:0-65535,1024之前端口不能用, ip地址+端口号保证数据发到对方计算机指定软件
基础
降低耦合:尽量用接口,少用继承,模块功能尽量单一,少用全局变量,多用设计模式
Final关键词:表明这个类不能被继承
二叉树遍历方式:前序遍历:根-左-右 中序遍历 左-根-右 后序遍历 左-右-根
继承跟聚合:继承指的是一个类继承另外的一个类的功能,并可以增加它自己的新功能的能力,聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;
单例模式:某个类只能有一个实例(懒汉式单例,饿汉式单例,双重检查)
工厂方法:定义一个创建对象的接口,让子类决定实例化那个类
优化数据查询:加索引,mysql索引底层是b树,增加主从服务器
红黑树:二叉平衡树
ArrayList 和 LinkedList :Arraylist底层是数组,linkedlist底层是列表速度快占内存
hashMap:是线程不安全的,HashMap底层是数组+链表+红黑树
抽象类和接口:都不能直接实例化,抽象类要被子类继承,接口要被类实现,接口可继承接口,并可多继承接口,但类只能单根继承
多态:多态是同一个行为具有多个不同表现形式或形态的能力,多态就是同一个接口,使用不同的实例而执行不同操作
public:被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
private: 被其修饰的类、属性以及方法只能被该类的对象访问,其子类,挎包不能访问
protect: 被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
default:只允许在同一个包中进行访问。
IO和NIO:IO(BIO)是面向流的,NIO是面向缓冲区的
浅拷贝深拷贝: 浅复制仅仅是指向被复制的内存地址,深拷贝是直接开辟一块内存存储复制内容
数组与链表:数组是将元素在内存中连续存放(不能适应动态增减数据,寻找快),链表在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起(可以方便插入删除,寻找慢)
Http响应码:2成功,3重定向,4找不到资源
equals和==:==本质上比较是内存地址,equals内容比较
JDK 和 JRE: jdk,java 开发工具包;jre,java 运行环境
JAVA垃圾回收:1.判断:引用计数法(python),可达性算法(java)2.回收:复制收集算法,标记清楚算法,标记整理算法
String:String声明的是不可变的对象,StringBuffer是线程安全的,而 StringBuilder 是非线程安全的
线程和进程:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
int和Integer:int的包装类就是Integer
框架
IOC:就是将原本在程序中手动创建对象的控制权,交由给Spring框架来管理,底层就是工厂模式
AOP:能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性
Mybaits如何映射数据库:通过注解或xml中配置的sql语句查询到数据库信息封装到list返回