Java面试宝典(2019版)

Java面试宝典(2019版)附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全:书单导航页(点击右侧极客侠栈即可打开个人博客):极客侠栈①【Java】学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版)②【算法数据结构+acm】从入门到进阶吐血整理书单50+本(珍藏版)③【数据库】从入门到进阶必读18本技术书籍网盘吐血整理网盘(珍藏版)④【Web前端】从HT…

大家好,又见面了,我是你们的朋友全栈君。

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全:

书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈
【Java】学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版)
【算法数据结构+acm】从入门到进阶吐血整理书单50+本(珍藏版)
【数据库】从入门到进阶必读18本技术书籍网盘吐血整理网盘(珍藏版)
【Web前端】从HTML到JS到AJAX到HTTP从框架到全栈帮你走更少弯路(珍藏版)   
【python】书最全已整理好(从入门到进阶)(珍藏版)

【机器学习】+python整理技术书(从入门到进阶已经整理好)(珍藏版)
【C语言】推荐书籍从入门到进阶带你走上大牛之路(珍藏版)
【安卓】入门到进阶推荐书籍整理pdf书单整理(珍藏版)

【架构师】之路史诗级必读书单吐血整理四个维度系列80+本书(珍藏版)

【C++】吐血整理推荐书单从入门到进阶成神之路100+本(珍藏)

【ios】IOS书单从入门到进阶吐血整理(珍藏版)

——————————————————————————————————————————————-

此内容偏中高级,适合有三年经验者。

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

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

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

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(){

})
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159078.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ajax的data传参的两种方式

    ajax的data传参的两种方式

    2021年10月11日
  • C语言结构体详解_结构体组成

    C语言结构体详解_结构体组成结构体(struct)1、定义一般格式为:struct结构名{类型变量名;类型变量名;…}结构变量;结构名是结构的标识符不是变量名。下面举一个例子来说明怎样定义结构变量

  • EFI和EFI Shell命令简介[通俗易懂]

    EFI和EFI Shell命令简介[通俗易懂]EFI是ExtensibleFirmwareInterface的缩写,是介于平台固件和操作系统之间的一层软件接口。EFI是Intel在1998年开始的一个项目演变而来,而在2005年Intel将EFI1.10开源并交由UnifiedEFI开源社区去维护和开发,Intel自己的EFI也就不单独做了,都和开源社区共用一个。现在也通常用EFI来代指UEFI,二者不再有意区分。EFIShell

  • 我为什么放弃Go语言

    我为什么放弃Go语言我为什么放弃Go语言?有好几次,当我想起来的时候,总是会问自己:这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。开门见山地说,我当初放弃Go语言,就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论,但是我有足够详实的客观的论据。

  • opencv-python中 boundingRect(cnt)以及cv2.rectangle用法「建议收藏」

    转自http://blog.csdn.net/zhangxb35/article/details/47275277矩形边框(BoundingRectangle)是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更小,效果见下图上代码首先介绍下cv2.boundingRect(img)这个函数这个函数很简单,img是一个二值图,也就是它的参数;

  • vue上传图片组件编写

    vue上传图片组件编写点击打开源码编写一个vue上传图片组件:1.首先得有一个[type=file]文件标签并且隐藏,changge事件来获取图片:2.触发隐藏的文件标签:(通过原生的click来触发)document.getElementById(‘upload_file’).click()3.获取file文件里面的值方法:fileChange($event)fileCha

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号