首页 > 科技 > BAT大厂 给出的657道Java面试题:认知决定格局

BAT大厂 给出的657道Java面试题:认知决定格局

很多朋友经常在留言区,跟我吐槽 Java 面试时遇到的问题(我选了几个经典的问题):

  • Java 技术能力自以为还不错,但是到了面试的时候就凉凉;
  • 对面试官提出的问题感觉很懵,不知道面试官要问啥;
  • 有的面试官,一坐下就从基础的知识开始狂问;
  • 有的面试官,却一直揪着业务场景提问,不论求职还是晋升答辩,完全不知道面试之前该准备些什么。

面试(不论是求职还是晋升)是我们谁都不能逃避的事情。除了低头写代码,你还是要思考下和你的薪资息息相关的面试技巧。我特意去搜集了很多的资料,分享三点我的经验:

1.Java 基础知识很重要

对于 Java 基础知识的熟练掌握,是很多大公司非常重视的基本能力,但是总有同学沉迷高深的技术,而忽视这一点。如果你的底层知识扎实,有一套完整的知识框架,会为你今后的所有面试打下牢固的基础。

2.要清晰了解面试官的意图,千万别答非所问

针对 Java 不同的工作职位要求,面试考察的能力侧重点是不同的。

  • 如果你是校招面试,会考察你的基础知识、逻辑思维,更多以培养潜力的考察为主;
  • 如果你是初中级 Java 工程师,你需要多关注知识的广度与基础知识的应用;
  • 而对于高级或者资深 Java 工程师来说,则更需要深入理解基本原理,能对各种知识灵活运用,对你的考察,就是以综合的能力考查为主了。

3.对 Java 应用能力考察点和加分项有所认知

不同的类型的公司,对于候选人的能力需求是不一样的。对于社交门户类,一般对 Java 工程师的考查点是大规模高并发场景的应用与架构能力;O2O 行业则会侧重于对面试者综合能力的考察;而互金则更青睐于哪些思维逻辑缜密,对高可用安全领域有丰富经验的候选人。

对此我整理了Java业界大佬给出的Java面试题,内容丰富,其中包含有:

多线程

226.说说乐观锁与悲观锁

答:悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。

两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。

227.在Java中怎么实现多线程?描述线程状态的变化过程。

答:当多个线程访问同一个数据时,容易出现线程安全问题,需要某种方式来确保资源在某一时刻只被一个线程使用。需要让线程同步,保证数据安全线程同步的实现方案: 同步代码块和同步方法,均需要使用synchronized关键字

同步代码块:public void makeWithdrawal(int amt) {

synchronized (acct) { }

}

同步方法:public synchronized void makeWithdrawal(int amt) {}

线程同步的好处:解决了线程安全问题

线程同步的缺点:性能下降,可能会带来死锁

高级框架

434.Maven的工程类型有哪些?

POM工程

POM工程是逻辑工程。用在父级工程或聚合工程中。用来做jar包的版本控制。

JAR工程

将会打包成jar用作jar包使用。即常见的本地工程 - Java Project。

WAR工程

将会打包成war,发布在服务器上的工程。如网站或服务。即常见的网络工程 - Dynamic Web Project。war工程默认没有WEB-INF目录及web.xml配置文件,IDE通常会显示工程错误,提供完整工程结构可以解决。

435.Maven常用命令有哪些?

install

本地安装, 包含编译,打包,安装到本地仓库

编译 - javac

打包 - jar, 将java代码打包为jar文件

安装到本地仓库 - 将打包的jar文件,保存到本地仓库目录中。

clean

清除已编译信息。

删除工程中的target目录。

compile

只编译。 javac命令

deploy

部署。 常见于结合私服使用的命令。

相当于是install+上传jar到私服。

包含编译,打包,安装到本地仓库,上传到私服仓库。

package

打包。 包含编译,打包两个功能。

Linux操作

Java面试前可以提前准备一下,不过也不需要特地准备,别搞得像背书似的,反而觉得不真实。对于处于学习阶段的也可以参考以上面试题作为巩固基础的一个手段。

因内容太多、我只挑了一部分放上来,如果你需要整套面试题及答案的话!

获取方式:

转发本文+任意评论,然后私信小编“Java”即可免费获取。


本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/180112.html