Java基础和常用框架的面试题
前言
- 最近学校也催着找工作了,于是刷了一些面试题,学习了几篇大佬优秀的博客,总结了一些自认为重要的知识点;听不少职场前辈说,对于应届毕业生,面试时只要能说到核心重要的点,围绕这个点说一些自己的看法,面试基本上就基本上能过了,实际开发时技术没什么问题就行
这些概念性的东西,谁能全记住,大概差不多就行了嘛,程序员何必为难程序员

下面进入正文,写的不对的地方,欢迎大家指正
Java基础
面向对象:封装、继承、多态
封装:将对象的属性私有化,并提供外界访问的属性和方法
继承:子类拥有父类所有的属性和方法,子类可在父类的基础上扩展
多态:父类引用指向子类对象,子类以父类的身份,使用自己的方法,但不能使用自己特有的方法
全局变量作用于整个项目,成员变量是对象的一部分;局部变量作用于当前方法
序列化:将对象转化为字节序列,反之则是反序列化
throw和throws的区别:
throw在方法体内,表示抛出异常的动作
throws表示可能会抛出的异常类型异常处理的方式:try-catch \ throws
try放可能出现异常的代码,catch捕获后处理;throws在方法头部抛出异常,交给方法的调用者处理Java基本数据类型: Byte、 shot、 int、 long、 float、 double、 char、 boolean
装箱即是基本数据类型转化为封装数据类型,反之则是拆箱
String、StringBuffer、StringBuilder区别:
- String类存储数值不可改变的字符串,StringBuffer可动态构建字符数据,StringBuilder是一个可变的字符序列
- StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象,不同之处在于StringBuilder不需要考虑线程安全
数组与集合:
- 数组中的元素为同一类型
- 集合相当于可变数组,List存储有序可重复的序列,Set存储无序不可重复的序列,Map以键值对的形式存储,Set、Map的重复数据会覆盖
3. List的实现类:ArrayList线程不安全,Vector线程是安全的,LinkedList
4. Set的实现类:HashSet线程不安全,LikedHashSet是HashSet的子类,TreeSet底层是红黑树
5. Map的实现类:HashMap,TreeMap
重载和重写:
- 重载:同一个类中存在多个同名的方法,方法的参数类型和个数不一样
- 重写:子类在继承父类时,方法名和参数一样,方法体不一样
抽象类和接口:
- 抽象类带有abstract关键字,抽象类里的抽象方法使用abstract关键字
- 接口使用interface关键字,接口中的方法不能使用私有和受保护的访问修饰符
- 共同点:都有抽象方法,且不能实例化对象
- 不同点:抽象类只能单继承,接口可以多实现;抽象类可以有普通方法、构造方法,接口只能有抽象方法
servlet生命周期:
- Init() 初始化、 service() 处理请求、 destroy() 终止
- servlet单实例,为了减少资源消耗
get和post请求:get从服务器上获取少量数据,post向服务器发送数据,安全性相对较高
设计模式:
- 单例:该类只能返回一个实例
- 工厂模式:将new对象的过程交给工厂来管理
- 简单工厂:如在工厂类中new多个实现类的对象,其他类中调用工厂类方法传入对应参数 new指定对象
- 静态工厂(创建对象的方法定义为静态方法)、万能工厂、可配置工厂(引入外部配置文件,利用反射创建对象)
- 工厂方法模式:延迟到继承工厂类的子类来选择 实例哪个对象
- 抽象工厂模式:提供 创建相互依赖对象的 接口,无须指定具体的类
- 外观模式:为多个复杂的子系统提供一个对外的统一的接口,更容易访问
- 适配器模式:将一个类的接口转换为可以兼容其他类的接口
- 代理模式:为某个对象提供代理控制该对象的文件
json:用于数据传输,json对象是在{}中存键值对,json数组是在[]中存多个json对象
事务:
a. 事务的特性:原子性、一致性、隔离性、持久性
b. 编程式事务基于xml配置,声明式事务基于注解
c. 作用:维护数据库的完整性,要么完全执行,要么完全不执行Ajax:异步请求,局部刷新,用于客户端向web服务端请求或提交数据
线程和进程:
1. 进程:程序的一次执行过程,线程是更小的执行单位- 创建线程:
a. 继承Thread类
b. 实现Runneable接口
c. 实现Callable接口
d. 线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度 - 线程生命周期:就绪、运行、阻塞、死亡
4. 线程优先级1-10,越大越高 - 死锁:两个线程都持有对方的锁,试图获取对方手里的锁,导致无限循环等待;无法解除死锁,只能强制结束JVM;确保线程获取锁的顺序一致可避免死锁
- 线程安全:使用线程安全的类;使用synchronized同步代码块,或者用Lock锁
- 创建线程:
session和cookie:数据保存在session中,session保存在服务端,sessionId保存在cookie中,发送给客户端
==和equal的区别:
- equals()比较的是值和hashCode码,==比较的是内存地址
- 如果要重写equals(),必须重写hashCode()
内部类:在类内部的类,外部类不能继承内部类,内部类可以继承外部类和内部类
网络编程:
- socket可以使一个应用从网络中读取和写入数据,ServerSocket是等待客户端的请求
- 客户端向服务器发送请求步骤:
1.创建一个Socket实例
2.利用I/O流与服务器进行通信
3.关闭socket
- 服务器接收客户端请求步骤:
1.创建一个ServerSocket实例,监听客户端发来的请求
2.与客户端获取连接后,创建一个Socket实例,利用I/O流与客户端进行通信,完毕后关闭Socket - 网络:
应用层:通过应用进程间的交互来完成特定的网络应用,支持HTTP协议,SMTP协议
运输层:向两台主机进程之间的通信提供通用的数据传输服务,支持TCP、UDP
网络层:选择合适的网间路由和交换节点,确保数据及时传送
数据链路层:将网络层交下来的IP数据报组装成帧
物理层:实现相邻计算机节点之间比特流的透明传送 - 建立TCP连接的3次握手:目的是建立可靠的通信信道
客户端发送带有SYN标志的数据包
服务端发送带有SYN/ACK标志的数据包
客户端发送带有ACK标志的数据包 - 断开TCP连接需4次挥手:
客户端发送一个FIN
服务端收到后,发送一个ACK
服务端关闭连接,发送一个FIN
客户端发送ACK - 区别:UDP更有效,TCP更可靠
常用框架
在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入
Bean:构成Spring应用核心的Java对象,由IoC实例化,是单例
IoC:将实现某个功能的bean交给spring容器来管理;创建对象,管理对象
DI: 属性注入(setting)、构造器注入、El表达式动态注入( #{}的方式 )
AOP:连接点(被拦截到的点) 通知、切点(对连接点拦截的定义) 切面(切点+通知)、目标对象(被通知的对象)
面向切面编程:通过预编译方式和运行期间动态代理实现程序功能的统一维护
织入:将切面应用到目标对象并创建新的代理对象的过程
springMVC工作流程:前端控制器进行全局流程控制、处理器映射决定控制器处理请求、视图解析器决定控制器处理后的结果如何渲染
Mybatis:
- ${}不防值注入 #{}防值注入
- mapper接口中 方法内的参数会传递给注解中sql的参数,接口全限定名+方法名定位一个mapperdStatement,用来发送sql语句
- mapper接口+xml映射、mapper接口+注解
- 步骤:创建session工厂,创建session对象,执行sql,提交事务,关闭会话
- 一级缓存作用域是session,二级缓存作用域是整个命名空间,可跨session
JDBC:
- 步骤:导入驱动,加载驱动,连接数据库,发送sql语句,处理结果集
- 不足:频繁创建和释放,资源浪费;Mybatis配置连接池管理连接,
Mybatis中java代码和sql语句分离,易于维护,
Mybatis传参时以及处理结果集时自动映射
结语
- 这里就先预祝大家找到合适的工作

Java基础和常用框架的面试题的更多相关文章
- java基础阶段几个必会面试题
摘自:https://www.cnblogs.com/zn19961006/p/11869182.html java基础阶段几个必会面试题 目录 1.说出你对面向对象的理解 在我理解,面向对象是向现实 ...
- 阿里P7整理“硬核”面试文档:Java基础+数据库+算法+框架技术等
现在的程序员越来越多,大部分的程序员都想着自己能够进入大厂工作,但每个人的能力都是有差距的,所以并不是人人都能跨进BATJ.即使如此,但身在职场的我们一刻也不能懈怠,既然对BATJ好奇,那么就要朝这个 ...
- Java基础--说集合框架
版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ...
- 【转】Java十大常用框架介绍(spring系+dubbo+RabbitMQ+Ehcache+redis)
一.SpringMVC Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动 ...
- java基础之常用类1
java基础 以下内容为本人的学习笔记,如需要转载,请声明原文链接 java常用类: 1.内部类 2.Object类 3.Object类常用方法 4.包装类 5.String类 6.BigDeci ...
- Java基础 匿名内部类 异常 多线程 集合面试题
匿名内部类:没有名字的内部类.就是内部类的简化形式.一般只用一次就可以用这种形式.匿名内部类其实就是一个匿名子类对象.想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现接口. 匿名内部类的格式 ...
- 简单介绍几种Java后台开发常用框架组合
01 前言 Java框架一直以来都是面试必备的知识点,而掌握Java框架,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能对当前正在开发中的系统有整体的认知,从而更好的熟悉和学习技术,这篇 ...
- 【Java基础】常用类
常用类 字符串相关的类 String类:代表字符串,使用一对 "" 引起来表示. public final class String implements java.io.Seri ...
- 黑马程序员——【Java基础】——集合框架
---------- android培训.java培训.期待与您交流! ---------- 一.集合框架概述 (一)集合框架中集合类关系简化图 (二)为什么出现集合类? 面向对象语言对事物的体现都是 ...
随机推荐
- xampp的Apache服务无法启动 Apache的443端口被占用解决方法
今天在使用本地的XAMPP的时候,发现Apache服务不能正常启动,根据以往的经验,可能是80端口或者443端口被占用导致的,所以对端口占用情况进行排查. 1. 执行xampp/apache/bin中 ...
- Java实战:教你如何进行数据库分库分表
摘要:本文通过实际案例,说明如何按日期来对订单数据进行水平分库和分表,实现数据的分布式查询和操作. 本文分享自华为云社区<数据库分库分表Java实战经验总结 丨[绽放吧!数据库]>,作者: ...
- POJ3048
素数筛,数据范围不大,直接暴力筛. 坑:有个数据是 1 1,答案是1.差点没把我卡去世. 我的三观哪去了. #include<iostream> #include<cstdio> ...
- C++第三十五篇 -- 写第一个驱动开发程序
VS2017+WDK+VMware12+Win10环境配置完毕,接下来写第一个驱动程序. 1.新建一个KMDF的程序. 2.配置项目属性. 3.编译项目.一般这里应该成功,我一台电脑成功了,另一台电脑 ...
- HCNA Routing&Switching之OSPF缺省路由发布
前文我们了解了OSPF的度量值,以及基础配置命令的总结,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15069632.html:今天我们来聊一聊在ospf里动 ...
- win10家庭版无法访问samba
1:本教程只针对win10家庭版用户,右键点击电脑选择属性就能看到自己的版本.(因为win10家庭版没有本地策略组) 2:针对一下连接不上的情况 3:连接不上的情况 ① : ...
- 新一代垃圾回收器ZGC的探索与实践
ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括: 停顿时间不超过10ms: 停顿时间不会随着堆的大小,或者活跃对象的大小而增加: ...
- 自学linux——4.Linux的自有服务(基础篇)
linux自有服务(内置) 一.运行级别(模式) 在Linux中存在一个进程:init,进程id是1. 查看进程:#ps -ef|grep init 对应的配置文件:inittab(运行级别配置文件位 ...
- Mysql数据库基础知识(全)
前言:本博文为个人笔记,记录了Mysql的一些基本操作,一般掌握本博文就可以了解数据库.表.数据项的增删改查,希望对大家的学习有所帮助. 首先下载PHPSTUDY,将Mysql配置为系统变量. 具体操 ...
- let 及const
ES5中的块级作用域 ES5中只有全局作用域和函数作用域,这样带来了很多的不便利,会出现内层变量被外层变量覆盖,循环体中的变量会暴露在全局,很多情况下需要自执行函数来私有化变量. ES6块级的作用域 ...