java程序员面试怎么难为面试官_Java程序员面试这些多线程问题你知道吗?

在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。所以你应该准备很多关于多线程的问题。在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的。他们会问面试者很多令人混淆的Java线程问题。面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面。用于直接面向市场交易的高容量和低延时的电子交易系统在本质上是并发的。

什么是线程

一个线程要执行任务,必须得有线程

一个进程(程序)的所有任务都在线程中执行的

一个线程执行任务是串行的,也就是说一个线程,同一时间内,只能执行一个任务

多线程原理

同一时间,CPU只能处理1条线程,只有一条线程在工作(执行)

多线程并发(同时)执行,其实质是CPU快速的在多线程之间调度(切换)

如果线程过多,会怎样?

CPU在N多条线程中调度,会消耗大量的cpu资源

每条线程被调度执行的频率越低(线程的执行效率低)

多线程的优点

能适当提高程序的执行效率

能适当提高资源的利用率(CPU 内存利用率等)

多线程的缺点

创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1KB)、栈空间(子线程512KB、主线程1MB,也可以使用-setStackSize:设置,但必须是4K的倍数,而且最小是16K),创建线程大约需要90毫秒的创建时间

如果开启大量的线程,会降低程序的性能

程序越多CPU的线程上的开销就越大

程序设计更加复杂:线程之间的通讯,多线程的数据共享

主线程的主要作用

显示和刷新UI界面

处理UI事件(比如点击事件,滚动事件,拖拽事件等)

主线程的使用注意

别将比较耗时的操作放在主线程中,会导致UI界面的卡顿

将耗时操作放在子线程(后台线程,非主线程)

二、多线程的4种方案

下面这些是我在不同时间不同地点喜欢问的Java线程问题。我没有提供答案,但只要可能我会给你线索,有些时候这些线索足够回答问题。

1.现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。

2.在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?

lock接口在多线程和并发编程中最大的优势是它们为读和写分别提供了锁,它能满足你写像ConcurrentHashMap这样的高性能数据结构和有条件的阻塞。Java线程面试的问题越来越会根据面试者的回答来提问。我强烈建议在你去参加多线程的面试之前认真读一下Locks,因为当前其大量用于构建电子交易终统的客户端缓存和交易连接空间。

3.在java中wait和sleep方法的不同?

通常会在电话面试中经常被问到的Java线程面试问题。最大的不同是在等待时wait会释放锁,而sleep一直持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停执行。

4.用Java写代码来解决生产者——消费者问题。

与上面的问题很类似,但这个问题更经典,有些时候面试都会问下面的问题。在Java中怎么解决生产者——消费者问题,当然有很多解决方法,我已经分享了一种用阻塞队列实现的方法。有些时候他们甚至会问怎么实现哲学家进餐问题。

5.你将如何使用thread dump?你将如何分析Thread dump?

在UNIX中你可以使用kill -3,然后thread dump将会打印日志,在windows中你可以使用”CTRL+Break”。非常简单和专业的线程面试问题,但是如果他问你怎样分析它,就会很棘手。

6.用Java编程一个会导致死锁的程序,你将怎么解决?

这是我最喜欢的Java线程面试问题,因为即使死锁问题在写多线程并发程序时非常普遍,但是很多侯选者并不能写deadlock free code(无死锁代码?),他们很挣扎。只要告诉他们,你有N个资源和N个线程,并且你需要所有的资源来完成一个操作。为了简单这里的n可以替换为2,越大的数据会使问题看起来更复杂。通过避免Java中的死锁来得到关于死锁的更多信息。

7.你在多线程环境中遇到的共同的问题是什么?你是怎么解决它的?

多线程和并发程序中常遇到的有Memory-interface、竞争条件、死锁、活锁和饥饿。问题是没有止境的,如果你弄错了,将很难发现和调试。这是大多数基于面试的,而不是基于实际应用的Java线程问题。

8.为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?

这是一个非常经典的java多线程面试问题。这也是我刚开始写线程程序时候的困惑。现在这个问题通常在电话面试或者是在初中级Java面试的第一轮被问到。这个问题的回答应该是这样的,当你调用start()方法时你将创建新的线程,并且执行在run()方法里的代码。但是如果你直接调用run()方法,它不会创建新的线程也不会执行调用线程的代码。

9.Java中的volatile关键是什么作用?怎样使用它?在Java中它跟synchronized方法有什么不同?

自从Java 5和Java内存模型改变以后,基于volatile关键字的线程问题越来越流行。应该准备好回答关于volatile变量怎样在并发环境中确保可见性、顺序性和一致性。

10.什么是不可变对象,它对写并发应用有什么帮助?

另一个多线程经典面试问题,并不直接跟线程有关,但间接帮助很多。这个java面试问题可以变的非常棘手,如果他要求你写一个不可变对象,或者问你为什么String是不可变的。

总结:

其实,很多面试官都清楚,初级程序员对于多线程的掌握度几乎为零。但是面试环节中,很多面试官都会抱着试一试的态度去提问一两道多线程的题目。其目的不是为了难为面试者,也不是为了彰显面试的“高大上”,而是为了区分一般人才与优质人才。最后一点大家谨记:

在找工作的时候,除了做些相关面试和准备熟悉以前做的项目之外,还应该学习新的知识。毕竟,每多学一点,成功找到工作的机会就大一点。而且,IT这行,技术发展过于快速,如果没有学习新知识的动力,终究会被淘汰。

因为学习实在是很枯燥无味。学习是一个长期投资,短期很难道看到收益。所以学习这块最好可以给自己定一个目标,每天学习一点,慢慢的会达到的。如果没有动力的话,可以给自己设置奖励。这是可以激发学习的兴趣的。还有一点,今天能坐完的事情,绝对不要留给明天。毕竟,人都是有惰性的。你要相信你自己,今天的你能做的没有做,明天的你也不会做的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux es连接mysql_Linux下ES,kibana,mysql,kafka,zookeeper启动关闭方式

Linux下ES,kibana,mysql,kafka,zookeeper启动关闭方式ES前台方式启动切换到ES的bin目录下,执行./elasticsearch命令关闭窗口或者ctrlc会停止运行后台方式启动同样切换到ES的bin目录下,执行 ./elasticsearch -d 命令查看实时的日志…

java.util.timertask_java.util.TimerTask翻译

java.utilClass TimerTaskjava.lang.Objectjava.util.TimerTask All Implemented Interfaces:public abstract class TimerTaskextendsObjectimplementsRunnableA task that can be scheduled for one-time or repeated execution by a Timer. 由Timer安排执行一次或重复执行的…

java还值_Java到底是引用传递还是值传递

前言前段时间在群里看到类似这样一个问题,下面的代码会输出什么呢?public void test(){String str "hello";change(str);System.out.println(str);}private void change(String str){str "world";}当时看到这题,瞬间勾…

什么是java中的面向对象编程_什么是面向对象编程

什么是面向对象编程时间:2018-01-23 来源:面向对象编程讲解一.前言其实不管是java还是.net都是属于面向对象程序设计语言,归根结底,它们都离不开面向对象,所以什么是面向对象呢,意思就是object-oriente…

java两个长度不同数组_两组数组,长度不一样,如果其中一个数组的值在另一个中不存在,则不符合要求.怎么算?...

思路一先找到最长的数组,然后循环短的数组并判断元素是否在长数组中public class Main {public static void main(String[] args) throws CloneNotSupportedException {String[] strArr1{"ee","aa","bb","cc"};String[] st…

java如何给顺序表赋值_JAVA模拟新增顺序表及单链表

最近在回顾大学学的数据结构,这里给大家用javwww.cppcns.coma模拟顺序表和单链表的新增1顺序表新增/*** 顺序www.cppcns.com表** author cjd**/public class ArrayList {private Object[] elementData; // 底层是一个数组,目前还没有确定长度private int…

php sql查询两个表语句,sql多表查询语句与方法

sql多表查询有很多种方法,如有自然连接 INNER JOIN,外边查询LEFT JOIN,交叉查询JOIN,交叉连接JOIN等join on left on 等多的是哦。sql多表查询语句与方法sql多表查询有很多种方法,如有自然连接 INNER JOIN,外边查询LEFT JOIN,交叉查询JOIN,交叉连接JOIN等…

php浏览服务器某一文件夹内容,php删除web服务器中指定目录下的指定格式的文件...

今天还在写VipSystem Pro的授权部分,用户授权后,生成匹配该用户的唯一的php文件集合(在一个目录下),然后进行zip下所并弹出下载。这个临时生成的zip文件存放在我指定的一个目录。每个用户授权不同的功能,都会产生一个唯一的zip压缩…

PHP的html实现xpath解析,php用xpath解析html的代码实例讲解

实例1$xml simplexml_load_file(https://forums.eveonline.com);$names $xml->xpath("html/body/p/p/form/p/p/p/p/p[*]/p/p/table//tr/td[classtopicViews]");foreach($names as $name){echo $name . "";}实例2$url http://www.baidu.com;$ch curl…

php phpexcel用法,PHPExcel用法总结

PHPExcel用法总结总结一下PHPExcel的用法~//设置PHPExcel类库的include path//这里貌似直接include类文件就可以了# set_include_path(.. PATH_SEPARATOR .# ExcelPHP_LIBS . PATH_SEPARATOR .# get_include_path());/*** 以下是使用示例&am…

nginx php value,PHP+NGINX参数优化

Failed requests: 0Write errors: 0Requests per second: 3712.72 [#/sec] (mean)Time per request: 134.672 [ms] (mean)Time per request: 0.269 [ms] (mean, across all concurrent requests)Transfer rate: 732.37 [Kbytes/sec] received1000并发:Concurrency L…

php追加数据,php追加数据到mysql

追加数据 php mysqlphp追加数据到mysql在mysql里的一个表user中有个name的字段表中已经有一条记录id字段值是1name字段的值是”周”我现在想追加”杰伦”两个字到这个字段中也就是让这条记录的name字段的值从原来的”周”变成现在的”周杰伦”请问要怎么操作呢?如何…

php escapeshellcmd,利用/绕过 PHP escapeshellarg/escapeshellcmd函数

escapeshellarg和escapeshellcmd的功能escapeshellarg1.确保用户只传递一个参数给命令2.用户不能指定更多的参数一个3.用户不能执行不同的命令escapeshellcmd1.确保用户只执行一个命令2.用户可以指定不限数量的参数3.用户不能执行不同的命令让我们用groups去打印组里每个userna…

php 绕waf,【技术分享】php webshell分析和绕过waf技巧

作者:阻圣预估稿费:400RMB(不服你也来投稿啊!)投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿前言WebShell是攻击者使用的恶意脚本,它的用途主要是在攻击后的Web应用程序上建立持久性的后门。webs…

php写好程序后需要嵌套,什么是PHP嵌套函数?

这不仅是副作用,而且实际上是动态修改程序逻辑的非常有用的功能。它来自过程式PHP时代,但如果您想以最直接的方式为某些独立功能提供替代实现,那么它也可以与OO体系结构一起使用。(虽然在大多数情况下,OO是更好的选择,…

java 电子实时看板,看板界面的实现

在系统中有时通过以下界面可以直观的展示信息给用户:以上图形有几点比较重要:1, 一个面板显示一组属性(例如物料显示物料编号、物料规格),但要把最主要的属性通过颜色单独处分出来。2, 通过颜色来区分重要性,例如(红…

java https soap,Java Https Soap Server(Tomcat-Axis2)

1、%Tomcat%/server/server.xml找到下面一段:替换为:maxThreads"150" scheme"https" secure"true"clientAuth"false" sslProtocol"TLS"disableUploadTimeout"true" enableLookups"fal…

php在線評論,php在線生成pdf筆記 | 學步園

準備工作:網上下載fpdf類。網上下載chinese類,此類主要是讓pdf支持中文。實例:require(chinese.php);$pdfnew PDF_Chinese();mysql_connect(localhost,root,fkey);mysql_selectdb(mylib);mysql_query("SET NAMES uft-8");$query m…

php数组能不能静态,php 为什么常量可以用数组定义 静态变量却不能

<?php$GLOBALS[arr] array(1>1,2>2);define("ABC",$GLOBALS[arr][1]); # 这个定义可以class test{static $a $GLOBALS[arr][1]; # 这个初始化有语法错误}类的变量成员叫做“属性”&#xff0c;或者叫“字段”、“特征”&#xff0c;在本文档统一称为“属…

matlab简单程序实例视频,matlab编程实例100例.docx

matlab编程实例100例1-32是&#xff1a;图形应用篇33-66是&#xff1a;界面设计篇67-84是&#xff1a;图形处理篇85-100是&#xff1a;数值分析篇实例1&#xff1a;三角函数曲线(1)function shili01h0figure(toolbar,none,... position,[198 56 350 300],... name,实例01);h1ax…