发表时间:2022-03-25来源:网络
1、Object类自带哪些方法?
11个
2、对String类了解多少
1、String是java.lang包下一个类,是引用类型2、直接赋值的字符串, 都存在字符串常量池中3、String、StringBuffer、StringBuilder的区别
1、String是不可变的,StringBuffer和StringBuilder是可变的4、collection和collections的区别
Collection:是一个集合接口,继承它的接口主要有List、Set、:是一个针对集合类的一个帮助类。它包含有各种有关集合操作的静态方法。此类不能实例化,构造方法是私有的,就像一个工具类,用于对集合中元素进行排序、搜索以及线程安全等各种操作5、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
equals()、hashcode()6、从底层区分下ArrayList、LinkedList、HashMap的区别、初始大小及如何扩容
ArrayList与LinkedList的区别:7、HashMap、Hashtable的区别
HashMap:8、HashMap的底层
1、底层实现: 数组(位桶)+链表(哈希表)(JDK1.7)2、底层实现:数组+链表+红黑树(JDK1.8)9、HashMap、LinkedHashMap、ConcurrentHashMap的异同
1、LinedHashMap是HashMap的子类,底层都是哈希表,但ConcurrentHashMap的底层是(JDK1.8时是Node数组+链表+红黑树,JDK1.7时是sagment数组(重入锁:ReentrentLock) + HashEntry数组)10、Java中HashMap的Key值要是为类对象,则该类需要满足什么条件?
必须重写 equals()和hashCode() 方法11、Comparable和Comparator接口是干什么的?列出它们的区别。
都是用来实现集合中元素的比较、排序的Comparable:在java.lang包下,只包含一个compareTo()方法,是在集合内部定义的方法实现的排序Comparator:在java.util包下,包含compare()方法,还包含了其他方法,是在集合外部定义的方法实现的排序12、什么是流?按照传输的单位,分成哪两种流?他们的父类叫什么?
流是指数据数组的序列,数据的传输字节流:InputStream、OutputStream字符流:Reader、Writer13、什么叫对象序列化,什么是反序列化,如何实现对象序列化
序列化:把对象转换为字节序列的过程反序列化:把字节序列恢复为对象的过程实现:14、开启线程的三种方式
1、继承Thread类,重写run方法,不然run方法为空15、进程、线程、协程之间的区别
进程与线程的比较:16、线程之间是如何通信的
Synchronized同步实现通信,属于“共享内存”式的通信,多个线程需要访问同一个共享变量,谁拿到了锁(获得了访问权限),谁就可以执行wait()、notify()、notifyAll(),线程的等待与唤醒实现通信管道通信:主要用来实现线程之间二进制数据的传播17、在Java中wait和sleep方法的不同
wait()会释放锁,而sleep()不会释放锁sleep()用时间指定来使它自动醒过来wait可以用notify()或notifyAll()直接唤起wait是Object类的方法,sleep是Thread类的静态方法sleep必须捕获异常,而wait不需要捕获异常18、谈谈ThreadLocal关键字
ThreadLocal被称为线程变量,ThreadLocal内部实现为每一个线程保存了一份副本变量。每一个线程都有一个map对象,map对象中存放了ThreadLocal对象的副本变量作用:使每个线程的资源隔离化,不会与其他线程造成冲突19、run()和start()方法区别
start():开启线程,真正实现了多线程,但是通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有真正的运行,当分配到CPU时间片才进入运行状态。run():只是Thread类的一个普通方法20、什么是线程池,为什么要用线程池,说出几种常见的线程池
线程池:存储多个线程的容器线程池好处:21、描述一下线程的生命周期(描述5个状态)
新建状态(New):当线程对象对创建后,即进入了新建状态。就绪状态(Runnable):当调用线程对象的start()方法,线程即进入就绪状态。运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态。死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。22、为什么会发生死锁,如何避免死锁
原因:同一个资源被多个进程争夺而造成的一种阻塞现象四个必要条件23、多线程中的锁有哪些种类,说下区别
公平锁/非公平锁24、Synchronized和Lock锁的区别
1、Lock是一个接口,而Synchronized是一个关键字25、Synchronized有什么缺陷
1、保证了线程的安全,降低了速度和效率26、并行与并发的异同
并行:当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,多CPU或者一个CPU多核。并发:在操作系统中,是指一个时间段中有多个进程都处于已启动运行到运行完毕之间,且这多个进程都是在同一个处理机上运行,互相抢占资源。并发是在一段时间内宏观上多个程序同时运行,并行是在某一时刻,真正有多个程序在运行。27、Java如何实现并发
1、synchronized关键字来保证一次只有一个线程在执行代码块28、什么是深克隆浅克隆?描述两个的区别
深克隆、浅克隆的划分完全是根据是否克隆引用属性来说的。对于基本类型变量,克隆后数值大小相同即可,但对于引用数据类型,深克隆会复制引用指向的对象,而浅克隆只会克隆引用。29、什么是双亲委派模型?
加载一个类的时候, 会先由引导类加载器和扩展类加载器 来搜索有没有对应的类
如果有, 那么就加载完成,
如果没有, 会继续使用应用类加载器来完成搜索和加载工作
如果三个类加载器都找不到对应的类, 那么就会抛出ClassNotFoundException
问:自己定义一个java.lang.String类, 能不能使用?
不能
30、什么是类加载?类加载的过程是怎样的?
类加载:将.java文件编码成.class文件,jvm虚拟机启动时,通过一个.class对象来调用它,并为之生成的java.lang.Class对象类加载过程31、Java有没有内存泄漏
实际情况存在内存泄漏,虽然Java因为有垃圾回收机制(GC)理论上不会存在内存泄漏问题,但是在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收也会发生内存泄漏32、Runnable和Callable的区别
1、Runnable提供run方法,无法通过throws抛出异常,所有CheckedException必须在run方法内部处理。Callable提供call方法,可以直接抛出Exception异常。33、重定向和转发的区别,对应的方法是什么?
重定向:redirect,告诉浏览器请求另一个地址,地址栏的url改变,请求2次,不带有参数转发:forward,请求不中断,转发到另一个资源,请求另一个地址后再把返回内容返回给客户端,地址栏url不改变,请求1次,带有参数34、为什么String/Integer这样的包装类适合作为Key值
hashMap的存储过程:35、重载和重写的区别?
重载:在同一个类当中有多个名称相同方法,但各个相同方法的参数列表不同(无关返回值类型)重写:发生在不同的类当中,并且两者要有继承关系,重写是方法名字和参数的列表是要完全一致的,访问权限大于等于父类,抛出的异常和返回值类型(若是引用类型)小于等于父类,重写的意义在于父类的方法已经不能满足时,子类重写为自己需要的36、HashSet原理
是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75的HashMap无序,不允许重复,允许有null值37、线程同步的方式
1、wait():使一个线程处于等待状态38、TreeSet用什么方法来区分元素是否重复
实现Comparable接口,用compareTo方法1、数据库三范式是什么
1NF:数据库表的每一列都具有原子性,是不可分割的2NF:在1NF基础上消除部分函数依赖3NF:在2NF基础上消除传递依赖2、SQL分为哪几个大类
DDL(数据定义语言) - 和数据库以及数据表的 CRUD(增删改查) 操作DML(数据操纵语言) - 和表中的记录相关的 CRUD 操作DQL(数据查询语言) - select 记录DCL(数据控制语言) - 数据库服务器的操作权限、用户等相关的3、SQL约束有哪几种
主键约束(primary key) - 特点:非空且唯一非空约束(not null) - 特点:不能为空唯一约束(unique) - 特点:唯一,不能重复外键约束(foreign key) - 特点:保证一个表中的数据匹配另一个表中的值check约束 - 特点:保证列中的值符合指定的条件default约束 - 特点:规定没有给列赋值时的默认值4、having、where、groupby的执行顺序
where -> groupby -> having5、什么是事务,事务有哪四个特性(详细解释,其中由隔离性触发的问题有哪些)
事务:业务层面上不可分割的最小单位,是数据库操作的最小单元事务四个特性6、并发下事务会产生哪些问题,可用对应的哪个事务隔离级别来解决
读未提交:read uncommitted(都不能解决)读已提交:read committed(只能解决脏读)(Oracle)可重复读:repeatable read(能解决脏读和不可重复读)(MySqL)串行化:serializable(都可解决)(隔离级别最高,性能最差,安全性最高)7、Oracle和MySQL的区别(包括默认事务隔离级别)
1、MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交8、什么是事务的传播行为,为什么要有传播行为
事务传播行为:指当一个业务方法被另一个业务方法调用时,业务中的事务方法应该如何进行好处:保证了数据库数据的安全,也保证了事务之间的交互安全REQUIRED:如果当前没有事务,就新建⼀个事务,如果已经存在⼀个事务中,加入到这个事务中。⼀般的选择(默认值)SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)9、drop table、delete from table和truncate的区别
drop table:删除表delete from table:删除表中的数据(挨个删除)truncate:删除表中的数据(删除表,重新建表)10、列举几种表连接方式,有什么区别
内连接:只显示两个表匹配的行与列11、什么是视图,以及视图的优缺点
视图:通过查询建立得到一张临时表,然后保存下来优点12、什么是索引,索引的分类,索引有哪些优缺点,建立索引有哪些原则
索引:可以加快从表或视图中查询数据的速度分类13、如何优化数据库
1、选取最适用的字段属性14、描述JDBC连接数据库的步骤
1、加载驱动15、什么是SQL注入,怎样防止
SQL注入:通过字符串的拼接, 将整个SQL语句的语义结构改变了, 从而达到一定目的(不安全的语法, 一定要避免)防止:PreparedStatement 可以有效防止SQL注入(预编译)16、什么是数据库连接池,实现原理以及优势
数据库连接池:存储多个数据库连接的一个容器原理:在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用优势17、什么是存储过程、什么是函数、怎样创建存储过程和函数
存储过程:是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它(call procedure_name(params);)。函数:是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、(OOP中)方法。是由一个或多个 SQL 语句组成的子程序,可用于封装代码以便重新使用(select function_name(params);)。创建存储过程:使用create procedure语句创建函数:使用create function语句存储过程和函数的区别在于存函数是必须有返回值的,而存储过程并没有。所以可以说函数是一个有返回值的存储过程,而存储过程是一个没有返回值的函数。18、什么是触发器,触发器有哪些作用
触发器:是一种特殊的存储过程,是由事件来触发某个操作。这些事件包括insert语句、update语句和delete语句。当数据库系统执行这些事件时,会激活促发其执行相应的操作。触发器作用19、Redis
Redis是一种非关系型数据库1、Redis支持丰富的数据类型,比如String/List/Hash/Set/Sorted set1、Ajax请求有几种返回值
xml、html、script、JSON、text2、Ajax有几部分组成,核心是什么
组成
1、Javascript:是通用的脚本语言,用来嵌入在某些应用中。而Ajax应用程序就是使用JavaScript来编写的。
2、CSS:为Web页面元素提供了可视化样式的定义方法。Ajax应用中,用户界面的样式可以通过CSS独立修改。
3、DOM(文档对象模型):通过JavaScript修改DOM,Ajax应用程序可以在运用时改变用户界面,或者局部更新页面中的某个节点。
4、XMLHttpRequest对象:允许Web程序员从Web服务器以后台的方式来获取数据。
核心:XmlHttpRequest对象,是一种支持异步请求的技术
3、什么是JSON,JSON的优缺点
JSON:是JavaScript对象表示法,是存储和交换文本信息的语法
优点
1、数据格式比较简单,易于读写
2、易于解析这种语言
3、支持多种语言,便于服务器端的解析
4、广泛的支持浏览器与操作系统的兼容性
缺点
1、没有错误处理机制
2、安全性低
3、支持工具有限
4、web中常用http状态码以及含义
200 - 正常返回响应5、Http与Https的区别
传输信息安全性不同6、什么是Http协议无状态协议?怎么解决Http协议与状态协议?
无状态协议:对于事物处理没有记忆能力,也就是说,当客户端第一次向服务器发送http请求完成之后,再一次向服务器发送http请求,服务器并不知道该客户端是一个老用户解决7、常用的Http方法有哪些
GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器POST:用于传输数据给服务器,主要功能与GET方法类似,但一般推荐使用POST方式PUT: 传输数据,报文主体中包含文件内容,保存到对应URI位置HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件OPTIONS:查询相应URI支持的HTTP方法8、TCP和UDP的区别
TCP(传输控制协议):面向连接,提供可靠的服务,传输效率相对较低,TCP连接只能是点到点、一对一,面向字节流UDP(用户数据报协议):无连接,不可靠性,传输效率高,UDP连接支持一对一,一对多,多对一和多对多的交互通信,面向报文9、什么是TCP三次握手,什么是四次挥手
三次握手10、简述从输入网址到获得页面的过程
1、DNS(域名系统)域名解析1、浏览器输入URL到页面加载经历了哪些过程?
1、DNS域名解析2、简述Servlet生命周期
默认第一次接收到请求时创建,服务器关闭时销毁Servlet四种状态3、forward和redirect的区别
forward:转发4、什么是Cookie?Session和Cookie有什么区别?
Cookie:是客户端技术,不安全,但可以减轻服务器压力,客户端可以清除Cookie,保存的是字符串Session:是服务器技术,安全,但服务器压力较大,保存的是对象,Session默认需要借助cookie才能正常工作,可以作为Session域对象(生存周期为一次会话)5、什么是监听器,有什么作用
监听器:对内置对象的状态或者属性变化进行监听并且做出反应的特殊servlet作用6、什么是过滤器,有什么作用
过滤器:进行过滤,实现代码的定向执行和预处理作用7、JSP静态包含和动态包含的区别
语法不同8、JSP的内置对象和作用
out:用来传送回应的输出request:用户端请求,此请求会包含来自GET/POST请求的参数response:网页传回客户端的回应config:服务器配置,可以获得初始化参数session:与请求有关的会话期,用来保存用户的信息application:servlet 正在执行的内容,所有用户共享的信息page:JSP网页本身,指当前页面转换后的Servlet类的实例pageContext:JSP的页面容器,网页的属性是在这里管理,可以获取其他8个内置对象exception:表示JSP页面所发生的异常,在错误页中才起作用9、Servlet和JSP的联系和区别
联系:JSP是Servlet技术的扩展,本质上就是Servlet的简易方式区别10、get和post的区别
get:参数位置在url中,参数长度有限制,只能进行url编码,参数的数据类型只接受ASCII字符,不重复提交,回退无害,参数暴露,不安全,可以缓存,可以收藏为书签,参数保留在浏览器历史中,请求包个数1个(http header+data)post:参数位置在request body中,参数长度无限制,支持多种编码方式,参数的数据类型没有限制,重复提交,回退有害,安全性高,不可以缓存,不可收藏为书签,不保留在浏览器历史,请求包个数2个(先http header,再data)本质上都是TCP链接,最大的区别是,get产生一个TCP数据包,post产生两个TCP数据包(但是在火狐浏览器也只产生一个TCP数据包)11、web.xml的作用
web.xml主要用来配置,可以方便的开发web工程web.xml主要用来配置Filter/Listener/Servlet等web.xml不是必须的,一个web工程可以没有web.xml文件12、Tomcat的缺省端口是多少,怎么修改
Tomcat缺省端口是8080修改13、Tomcat有哪几种部署方式
直接将hello文件夹拷贝到 webapps 中,重启服务器将hello文件打包成war文件,将hello.war文件复制到 webapps 中,服务器正在运行,会自动解压war文件修改conf/server.xml文件,重启服务器 在conf/Catalina/localhost/14、 JSP 的常用指令
:用来在JSP 页面包含静态资源:用来指定JSP 页面标签类型:用来指定页面相关属性15、解释一下什么是servlet
Servlet:是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层使用 Servlet,可以收集网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页16、 Ajax的实现流程是怎样的?
1、创建一个异步调用对象(XMLHttpRequest)1、Spring在SSM中起什么作用?
Spring框架将各层内容进行整合,并且提供IOC(反转控制,实现bean对象的创建、依赖注入)和AOP(面向切面编程,实现事务管理和方法增强)的操作是轻量级框架,作为bean工厂,用来管理bean的生命周期和框架整合2、Spring的事务?
基于SpringAOP技术声明式事务管理:将业务代码和事务管理分离,用注解和xml配置来管理事务配置Spring事务的步骤(基于xml)3、IOC在项目中的作用?
降低系统代码的耦合性,解决对象之间的依赖问题,通过配置文件或注解关联起来进行依赖注入4、Spring的配置文件中的内容?
主要实现bean对象的创建、依赖关系的注入、bean对象的分发等功能5、Spring下的注解?
将实体类注册到Spring容器6、Spring DI的四种方式?
1、构造器注入(默认无参构造器注入)7、Spring主要使用了什么模式?
工厂模式:每个Bean对象的创建通过的方法单例模式:默认的每个Bean对象的作用域都是单例代理模式:SpringAOP的实现通过代理模式8、IOC,AOP的实现原理?
IOC(反转控制,实现bean对象创建、依赖注入):是基于Java的反射机制以及工厂模式实现的AOP(面向切面编程,实现事务的管理和方法增强):主要是使用动态代理实现的9、SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?
默认是单例模式,所以在多线程访问的时候会有线程安全问题解决方案:把控制器类的scope注解参数设置成是多例的作用:10、SpringMVC中控制器的注解?
@Re:设置请求地址@ResponseBody:设置是返回具体数据类型而非跳转@Controller: 一般用于表现层注册对象的注解11、@Re注解用在类上的作用?
Re是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径12、前台多个参数,这些参数都是一个对象,如何快速得到对象?
直接在方法中声明这个对象,SpringMVC就自动会把属性赋值到这个对象里面13、SpringMVC中函数的返回值?
String(转发到 .jsp 页面)、void(重定向、转发)、ModelAndView(转发到 .jsp 页面)、JSON14、SpringMVC中的转发和重定向?
转发15、SpringMVC和Ajax之间的相互调用?
通过JackSon框架把java里面对象直接转换成js可识别的json对象具体步骤如下:16、SpringMVC的工作流程图?
前端控制器、处理器映射器、处理器、处理器适配器、视图解析器
17、Struts2 和 SpringMVC 的区别?
入口不同18、Struts2 的框架原理?
https://blog.csdn.net/u011958281/article/details/7468565919、MyBatis 和 Hibernate 比的优劣势?
Hibernate和MyBatis都支持JDBC和事务处理Mybatis20、什么是MyBatis的接口绑定,有什么好处?
接口绑定:在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调用接口方法就可以两种绑定实现方式21、什么情况用注解,什么情况用xml绑定?
当Sql语句比较简单时候,用注解绑定当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多22、MyBatis的核心处理类叫什么?
核心处理类是S
Ser:每一个MyBatis的应用程序的入口Ser,它的作用是通过XML配置文件创建Configuration对象,然后通过build方法创建S对象
S:主要功能是创建S对象
S:完成一次数据库的访问和结果的映射,来获得接口的代理对象,它类似于数据库的session概念,由于不是线程安全的,所以S对象的作用域需限制方法内
Executor:在创建Configuration对象的时候创建,并且缓存在Configuration对象里,主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中(如果配置了缓存的话)
StatementHandler:真正访问数据库的地方,并调用ResultSetHandler处理查询结果
ResultSetHandler:处理查询结果
23、查询表名和返回实体Bean对象不一致,如何处理?
1、通过sql语句的字段起别名,别名和实体中的对象属性一致2、使用reslutMap对象来映射字段名和实体类属性名的一一对应关系24、MyBatis的好处?
1、简单易学,容易上手(相比于Hibernate) 基于SQL编程2、消除了JDBC大量冗余的代码,不需要手动开关连接3、很好的与各种数据库兼容4、提供了很多第三方插件(分页插件 / 逆向工程)5、能够与Spring很好的整合6、解除sql与程序代码的耦合,SQL写在XML里,从程序代码中彻底分离,且支持编写动态SQL语句7、提供映射标签,支持对象的属性与数据库的字段关系映射25、MyBatis配置一对多?
在resultMap映射中使用collection标签建立一对多的配置关系26、MyBatis配置一对一?
在resultMap映射中使用association标签建立一对一的配置关系27、${ } 和 #{ }的区别?
${ }:sql拼接符号(替换结果不会增加单引号‘’),存在sql注入问题, 名字只能是value#{ }:占位符号(替换结果会增加单引号‘’),可以防止sql注入(预编译),#{名字随意}28、获取上一次自动生成的主键值?
标签selectKey: 查询刚刚自动生成的记录对应的主键值29、MyBatis如何分页,分页原理?
直接使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页使用分页插件(pageHelper)进行分页30、MyBatis工作原理?
MyBatis通过Ser从mybatis-config.xml配置文件来构建S,然后,S的实例直接开启一个S,再通过S实例获得Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭S上一篇:2021最新java面试题及答案
下一篇:Java面试题(1)
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14