1.       java中wait和sleep有什么区别?多线程条件下如何保证数据安全?

答:最大区别是等待时wait会释放锁,而sleep会一直持有锁,wait通常用于线程时交,互,sleep通常被用于暂停执行。

2.       java中volatile和synchronized有什么区别?

 
  1. 1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
    2.volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。
    3.volatile仅能实现变量的修改可见性,并不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。
    4.volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
    5.volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化。

    3.       有了解java的原子类?实现原理是什么?

    答:采用硬件提供原子操作指令实现的,即CAS。每次调用都会先判断预期的值是否符合,才进行写操作,保证数据安全。

    4.       spring主要使用了哪些?IOC实现原理是什么?AOP实现原理是什么?

    答:spring主要功能有IOC,AOP,MVC等,IOC实现原理:先反射生成实例,然后调用时主动注入。AOP原理:主要使用java动态代理,

    5.       mybatis有了解吗?它与hibernate有什么区别?项目中,你会选哪个?

    答:两者都是轻量级ORM框架,hibernate实现功能比较多,通过HQL操作数据库,比较简单方便,但hibernate自动生成的sql相长,不利测试和查找原因。复杂sql时,编写比较困难,同时性能也会降低。mybatis是半自动化,手动编写SQL语句,同时提供丰富的参数判断功能。sql语句较清晰,可以直接进行测试,性能也较好,操作起来非常简单。同时hibernate容易产生n+1问题。hibernate学习成本较mybatis高。国内一些大公司基本上使用mybatis

    6.       缓存框架有使用过哪些?memcache和redis有什么区别?项目中,怎么去选择?

    答:缓存有:ehcache,memcache和redis等

    区别:

    1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过        memcache还可用于缓存其他东西,例如图片、视频等等。

    2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的   存储。

    3、虚拟内存—Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘

    4、过期策略—memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通 过例如expire 设定,例如expire name 10

    5、分布式—设定memcache集群,利用magent做一主多从;redis可以做一主多从。都     可以一主一从

    6、存储数据安全—memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)

    7、灾难恢复—memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复

    8、Redis支持数据的备份,即master-slave模式的数据备份。

    项目使用选择:

    redis是单线程实现,若需要使用控制某些并发状态时,可以使用redis.项目中需要使用 复杂的list,set操作时,同时可以对数据进行持久化。

    当存储数据较大时,如100k以上,那memcache性能较好,在多核上,memcache较     好

    7.       说说数据库性能优化有哪些方法?

    答:使用explain进行优化,查看sql是否充分使用索引。避免使用in,用exist替代,字段值尽可能使用更小的值,任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。使用连接查询(join)代替子查询。

    在表的多列字段上建立一个索引,但只有在查询这些字段的第一个字段时,索引才会被使用。

    8.       HTTP请求方法get和post有什么区别?

    1:Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。

    2:Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度限制,只能                   传递大约1024字节.

    3:Post就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get                      之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post                   的信息作为http请求的内容,而Get是在Http头部传输的。

    9.       linux命令熟悉?查看某个线程命令是什么?查看整个机器负载命令?文件内容快速查找命令是什么?

    查看线程:ps -ef|greptomcat

    查看负载:top

    文件内容查找:vi  /aa test.txt 或者先打开文件,再查找: vi test.txt   /aa

    10.  JVM内存模型是如何?垃圾回收机制有哪些?如何对JVM进行调优?

    答:由栈和堆组成,栈是运行时单位,堆内存则分为年轻代、年老代、持久代等,年轻代中的对象经过几次的回收,仍然存在则被移到年老代;持久代主要是保存class,method,filed等对象。

    sun回收机制:主要对年轻代和年老代中的存活对象进行回收,分为以下:

    年轻代串行(Serial Copying)、年轻代并行(ParNew)、年老代串行(SerialMSC),年老代并行(Parallel Mark Sweep),年老代并发(Concurrent Mark-Sweep GC,即CMS)等等,目前CMS回收算法使用最广泛。

    JVM调优主要是对堆内容和回收算法进行配置,需要对jdk产生的回收日志进行观察,同时通过工具(Jconsole,jProfile,VisualVM)对堆内存不断分析,这些优化是一个过程,需要不断地进行观察和维护。

    11.  如银行内部转账功能,如何保证数据一致性,即要么同时成功,要么同时失败?高并发时,又如何保证性能和数据正确?

    答:如果是单机内完成这些操作,那使用数据库的事务,即可轻松实现。若是分布式呢?

    12.  有了解分布式事务如何实现?

    答:分布式事务可以采用分布式锁进行实现,目前zookeeper就提供此锁;分布式锁需要牺牲一定性能去实现,若业务支付最终一致性,那此方法是最佳方案。如在京东下订单,过一会才会告诉你订单审核通过,而不是马上响应订单结果。

    13.  java抽象类和接口有什么区别?项目中怎么去使用它们?

    相同点:

    A. 两者都是抽象类,都不能实例化。

    B. interface实现类及abstractclass的子类都必须要实现已经声明的抽象方法。

    不同点:

    A. interface需要实现,要用implements,而abstractclass需要继承,要用extends。

    B. 一个类可以实现多个interface,但一个类只能继承一个abstractclass。

    C. interface强调特定功能的实现,而abstractclass强调所属关系。

    D. 尽管interface实现类及abstrctclass的子类都必须要实现相应的抽象方法,但实现的         形式不同。interface中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方         法体),实现类必须要实现。而abstractclass的子类可以有选择地实现。

    使用:

    abstract:在既需要统一的接口,又需要实例变量或缺省的方法的情况下,使用abstract;

    interface:使用: 类与类之前需要特定的接口进行协调,而不在乎其如何实现。 作为能          够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。需要将一组类     视为单一的类,而调用者只通过接口来与这组类发生联系。需要实现特定的多项功能,         而这些功能之间可能完全没有任何联系。

    14.  对socket熟悉?TCP通讯有几次握手?有使用过哪些socket框架?

    答:3次握手,客户端—>服务端,服务端—>客户端,客户端—>服务端,当这些过程完成之后,才真正建立起通信。java中比较有名的socket框架有:mina,netty,都是韩国小棒子写的。

    15.  了解java反射机制?反射生成类,能访问私有变量?

    答:即动态生成java的实例,可以

    16.  RPC是什么?有使用过哪些RPC框架?

    答:即远程进程调用,本地机器调用远程的服务,在项目规模大到一定程度,需要使用RPC相关框架进行服务化部署。如:hessian 、webservice等

    17.  熟悉js或css?jquery如何绑定页面某元素的点击事件?

    答:$(“#btn”).click(function(){

    })

18 .private、默认、protected、public作用范围

1)private,同类

2)默认,同类、同包

3)protected,同类,同包,子类

4)public,所有

String trim的实现原理

去掉首尾ASCII码值小于’ ‘(空格)的字符

StringBuffer、StringBuilder区别

StringBuffer线程安全

StringBuilder线程不安全

抽象类与接口的异同

同:具有抽象方法

异:1)抽象类可以有构造器,非抽象方法,非公有属性,仅可以单继承抽象类

2)接口仅有公有抽象方法或者公有静态常量,可以同时实现多个接口

个人使用经验:一般在控制层使用抽象类,提取公共初始化方法、框架定制化工具方法等

一般会在业务层使用接口

List、Set、Collections区别

1)List,有序可重复

2)Set, 无序不可重复

3)Collections,集合工具类

列举键值容器

1)HashMap,实现Map,异步

2)Hashtable,实现Map,同时继承旧的Dictionary类,同步

3)Properties,Hashtable的子类,系统参数

算法:快速排序

public static void quickSort(int a[], int start, int end) {
int i, j;
i = start;
j = end;
if ((a == null) || (a.length == 0))
return;

while (i < j) {//查找基准点下标
while (i < j && a[i] <= a[j])
// 以数组start下标的数据为key,右侧扫描
j—;
if (i < j) { // 右侧扫描,找出第一个比key小的,交换位置
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
while (i < j && a[i] < a[j])
// 左侧扫描(此时a[j]中存储着key值)
i++;
if (i < j) { // 找出第一个比key大的,交换位置
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
if (i - start > 1) { // 递归调用,把key前面的完成排序
quickSort(a, start, i - 1);
}
if (end - j > 1) {
quickSort(a, j + 1, end); // 递归调用,把key后面的完成排序
}
}

​​​​

inner join、left join、 right join区别

1)inner join,两表字段值相同

2)left join,两表字段值相同,以及左表字段有值,右表字段值为null

3)right join,与上相反

需要写sql的试题

一般会让查出值是最大的,用到子查询、组函数等

Reads(id, ip, cnt) ip不唯一,查出访问量最大的前10个ip并排序

select r.ip, r.s, rownum from (select ip, sum(cnt) s from reads group by ip order by s desc) r where r.rownum <= 10

数据库性能调优

1)经常做查询条件的字段建立序列

2)关联查询时,关联结果集,替代直接关联整张表;或者使用exists

jsp表单js校验

var name = document.getElementById(‘userName’).value;

if (name == ‘’)

{

alert(‘用户名不能为空’);

return false;

}

Struts的Action是单例吗

1)Struts1的Action是单例且线程安全

2)Struts2的Action不是单例,针对每一请求产生一个实例

Hibernate与Mybatis区别

1)Hibernate,使用pojo实现orm,查询速度相比较慢,插入/更新开发容易

2)Mybaits,使用纯sql开发,执行效率较快,比较适合统计、多表关联查询

Hibernate状态

瞬时态:new对象

持久态:实例与数据库中记录对应,拥有持久化标识

游离态:session关闭;session打开,游离态转成持久态

ibatis中#与$的区别

1)#,变量替换,即prepareStament设置字段值,并可以匹配变量类型

2)$,字符串拼接,需要小心依赖注入

事务特性

1)原子性:诸多操作要么全做,要么全不做

2)一致性:事务执行结果使数据库从一个一致性状态变到另一个一致性状态

3)隔离性:事务执行不被其他事务影响

4)持久性:一旦提交,对数据库的改变是永久性的

spring mvc与struts2的区别

1)struts2封装展示层与控制层,展示层提供标签库及验证器,请求与应答需要配置文件

2)spring mvc是单纯的控制层框架,url实现零配置,运行效率提高

Spring IOC注入方式

1)配置文件中,配置属性,提供setter/getter方法

2)零配置,@Autowired,统一配置根据名称或者类型注入

Spring AOP思想

针对请求做统一预处理,如有效性校验;或后处理,如记录处理结果;针对方法加before或after处理

Spring事务配置

1)使用tx:advice,针对业务接口层,如以do、get等命名的方法,作事务配置

WebService技术

1)axis、xfire、cxf,基于soap,传输xml

2)restful风格

jvm性能调优

tomcat性能调优

java三到四年面试题集合(自己经历以及收集)相关推荐

  1. 2022金三银四前端面试题预告

    2022金三银四前端面试题预告 马上就到了面试季了,今天整理了一下前端常见的一些面试题.虽说面试的时候造火箭,需要你背好八股文,不过很多基础还是应该掌握的,就算不面试,也应该多看一些基础,内功深厚了, ...

  2. 2023年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1.关于数据使用说法错误的是: A.在知识分享.案例中如涉及客户网络数据,应取敏感化,不得直接使用 B.在公开场合.公共媒体等谈论.传播或发布客户网络中的数据,需获 ...

  3. java每日一练:面试题集合

    6.29:1.说一下jdk和jre的区别? JRE是java运行时环境,包含了java虚拟机,java基础类库.是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的 ...

  4. Java核心(四)你不知道的数据集合

    导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧! Java中的集合通常指的是Collection下的三个集合框架List. ...

  5. [Java反射基础四]通过反射了解集合泛型的本质

    本文接上文"方法反射的基本操作",利用反射了解下java集合中泛型的本质 1.初始化两个集合,一个使用泛型,一个不使用 1 ArrayList list1 = new ArrayL ...

  6. 金三银四前端面试题准备

    HTTP HTTP 状态码? RFC 规定 HTTP 的状态码为三位数,被分为五类: 1xx :表示目前是协议处理的中间状态,还需要后续操作. 2xx :表示请求成功. 3xx : 重定向,表示要完成 ...

  7. 【金三银四】Java集合面试题(2021最新版)

    目录 前言 一.集合容器概述 1. 什么是集合 2. 集合的特点 3. 集合和数组的区别 4. 使用集合框架的好处 5. 常用的集合类有哪些? 6. List,Set,Map三者的区别? 7. 集合框 ...

  8. 没有金三银四,又要迎接所谓的金九银十,今年大环境这么差,Java岗必备面试题及答案学习还是得学

    前言 今年并没有"金三银四",但是马上又准备迎接金九银十了,你是否还在寻找没有"996"的公司,或者你在面试上面摘了跟头?准备了体体面面的自我介绍,败在了技术深 ...

  9. 【金三银四】Java中间件面试题(2021最新版)

    目录 前言 Zookeeper 1. ZooKeeper 是什么? 2. ZooKeeper 提供了什么? 3.Zookeeper 文件系统 4. ZAB 协议? 5. 四种类型的数据节点 Znode ...

最新文章

  1. 解决SqlServer2008修改表后保存时出现“save changes is not permitted…”问题
  2. java 取不同的随机数_Java实现获取指定个数的不同随机数
  3. 解决PHP Fatal error mysql_connect() mysql_query()的问题
  4. Jasypt 加密-整合SpringBoot
  5. 招银网络笔试java_春招|招银网络Java软件开发 电话面试+一二三面面经
  6. java配置jndi连接数_JavaWeb:Tomcat下配置数据源(JNDI)连接数据库 | 学步园
  7. mqa插件_为什么专有的MQA音乐编码系统比DRM更好,但仍然不好
  8. 报警服务器物理内存,服务器内存使用率优化
  9. 12. javacript高级程序设计-DOM2和DOM3
  10. android项目设计实验报告模板,Android实验报告模板_实验一.doc
  11. 开源房产中介管理系统
  12. github1s 油猴插件
  13. Post man 使用教程
  14. matlab ols hac,R语言中实现广义相加模型GAM和普通最小二乘(OLS)回归
  15. Linux下deb包和rpm包区别
  16. 数据类型在内存中的存储
  17. php reader oleread,使用phpExcelReader读取excel文件
  18. 更改电脑用户名(可更改C:\Users\用户名)
  19. Word中将多个表格内容批量居中:通过“宏”操作
  20. oracle生僻字解决方案

热门文章

  1. 创维电视酷开系统安装第三方软件 如创维电视安装电视家3.0
  2. html绘制LR graph,[LR]用R绘制上海地铁
  3. 检查字符串中的日文,韩文
  4. 安卓到ios显示无法连接到服务器,猎魂觉醒无法连接服务器怎么办 ios/安卓无法连接服务器解决办法...
  5. 「新品速递」ABAT系列蓄电池在线监测系统
  6. CUDA入门和网络加速学习(四)
  7. Vue压缩图片插件——localResizeIMG(简称lrz)
  8. Spring 使用详解
  9. 【Linux关机】常用关机命令及其比较
  10. 关于亚马逊SP-API接口申请的部分问题说明