Java常考面试题(三)
序言
说说今天遇到的一件小事吧,在遇到问题,查找答案时,看到很多人的博客里面都有提到关键字眼,可让人觉得可恨的是,大多数人写的博文中,基本上都是照着书上的语言发表的,看了跟没看一样,没有一点通俗的语言和自己关于该知识点的讲解,也有可能是觉得太简单,不用做解释,但是个人感觉,写博文,在一些自己都需要思考一段时间去理解的东西,应该把自己思考的过程,如何理解的写下来,而不是就把精华的部分复制黏贴上去,个人感觉没什么用,回想一下再写计算机网络教程学习历程的博文中,自己也有类似的情况,应该改正过来,在乎的是每篇博文的质量,而不是数量,不能有那种拼命往上面怼文章,来显示自己写了很多东西,以此用来面试,我觉得更是无用,写博文不为别人,是为了巩固我们的知识,和发表自己对一些问题的见解,这样才能真正的帮助到自己。开始今天的五题面试吧。
----WH
一、进程和线程的区别是什么?
自己讲解:
进程:拿电脑来说,在电脑上后台运行了很多程序,那就是进程
线程:为了完成一个程序的运行,可能程序中还有很多分支在一起运行共同来完成这个程序,分支的运行就是线程
也就是说:进程中包括很多线程,
参考答案:
进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。
自我评价:
大概理解,但是语言描述的不好,应用程序下有很多执行序列。 不应该说分支。
1、进程:执行的应用程序,通俗一点,在打开电脑的任务管理器中,就有很多应用程序,也就是进程
2、线程:进程内部的一个执行序列,通俗的讲,就是一个程序的运行,有很多线程在同时执行来共同维护该进程的运行
二、创建线程有几种不同的方式?你喜欢哪一种?为什么?
自己解答:
好久不用线程,这题直接不会了,哈哈,
参考答案:
有三种方式可以用来创建线程:
继承Thread类
实现Runnable接口
应用程序可以使用Executor框架来创建线程池
实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时, 线程池也是非常高效的,很容易实现和使用。
自我评价:
隔得比较久,但是印象中也是只有两种创建线程的方式,一个是继承,一个是实现接口。
1、继承Thread类,重写run方法,在run方法中写该线程要执行的任务,然后再在要执行该线程时,new出对象来,对象.start(),启动该线程
2、实现Runnable接口,实现其中的run方法,new出该对象A来,Thread thread = new Thread(A); 这样,thread.start(),就能启动该线程。
注意:继承Thread类局限于单继承,所以实现Runnable接口,就能在继承别的类。其实本质都一样,Thread类也实现了Runnable接口。
3、使用executor框架来创建多线程。可以自行百度去了解一下。
三、概括的解释下线程的几种可用状态。
自我解答:
创建状态、运行状态、暂停状态、死亡状态
参考答案:
1. 新建( new ):新创建了一个线程对象。
2. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 取 cpu 的使用权 。

自我评价:不清清楚这个内容,
1、五个状态 新建状态 -- 可运行状态 -- 运行状态 -- 阻塞状态 -- 销毁状态
2、阻塞状态
等待阻塞:使用wait(),然后再等待队列里面呆着。等待依次被调用
同步阻塞:调用了某个带锁的方法,当前锁被其他线程给拿到了,就需要等待其他线程用完,然后再拿到该锁,
其他阻塞:比如 执行了 sleep、或者 join 方法,使之线程进入了睡眠或者要等待别的线程执行完才轮到自己。
四、同步方法和同步代码块的区别是什么?
自我解答:
这个也不清楚。
参考答案:
区别:
自我评价:
1、同步的单词是: synchronized 异步的单词是: asynchronized
2、同步方法和同步代码块只得是用synchronized关键字对方法加锁,
3、同步方法: synbhronized只对方法加锁,作用的范围就是,如果该类对象调用了该方法,则获得锁,其他线程不管是调用该带锁的方法还是非锁方法都必须等待
4、同步代码块:对方法或者任意代码加锁,不同的是,只对获得该段代码的锁机制生效,意思就是,当A线程获得了该段代码的锁,B线程照样执行其他非带锁的方法。
五、在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
自我解答:
几个多线程的题目顿时懵逼了,多线程这块很弱,记不住,以前看了一点,都差不多忘记了。
参考答案:
监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。
在 java 虚拟机中, 每个对象( Object 和 class )通过某种逻辑关联监视器,每个监视器和一个对象引用相关联, 为了实现监视器的互斥功能, 每个对象都关联着一把锁. 一旦方法或者代码块被 synchronized 修饰, 那么这个部分就放入了监视器的监视区域, 确保一次只能有一个线程执行该部分的代码, 线程在获取锁之前不允许执行该部分的代码 另外 java 还提供了显式监视器( Lock )和隐式监视器( synchronized )两种锁方案
自我评价:
1、有关于java虚拟机的一部分,在讲解如何实现锁机制的。这个感觉有点超出我自己的能力了,等看到了应该会知道,现在当时了解一下,有这个东西。
Java常考面试题(三)的更多相关文章
- Java常考面试题
Java常考面试题 1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行 ...
- Java常考面试题整理(三)
明天又要去面试,Good luck to me.,让我在这段时间换个新的工作吧. 41.在Java中,对象什么时候可以被垃圾回收? 参考答案: 当对象对当前使用这个对象的应用程序变得不可触及的时候,这 ...
- Java常考面试题(二)
序言 昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的面试题,试着用 ...
- Java常考面试题整理(四)
有关所有Swing相关的面试题,都可以说是凑数的,感觉自己在敲这些的时候感觉一点用处都没有,可以从第72条开始看. 61.说出三种支持重绘(painting)的组件. 参考答案: Canvas,Fra ...
- Java常考面试题(二)(转)
序言 昨天刚开始的"每日5题面试"这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看 ...
- 阿里巴巴JAVA常考面试题及汇总答案
一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? 答: 1.String是字符串常量,StringBuffer和StringB ...
- Java常考面试题(经典)
什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被设计 ...
- Java常考面试题(四)
序言 双十一那天去我女朋友那了,11.11到11.13 漏了两天的内容,今天中午刚回来的,赶紧补一下前两天漏下的博文,我相信,坚持下来,会有成长的,等到出去实习那一天,肯定会很有帮助,会感谢现在自己的 ...
- Java常考面试题(一)
序言 我是一只乱飞乱撞的菜鸟,写的文章目前是以记录自己学习,和方便以后查看,期待日后不久能通过自己的努力,获得一点小小的成功,然后写出我的学习经验总结性文章来. ---WH 一.什么是虚拟机?为什么J ...
随机推荐
- Java ThreadLocal (Java代码实战-006)
ThreadLocal解决什么问题 由于 ThreadLocal 支持范型,如 ThreadLocal< StringBuilder >,为表述方便,后文用 变量 代表 ThreadLoc ...
- 【DB2】表函数监控数据库
1.快照表函数 在DB2 V9中能够使用SQL表函数捕获快照,以下是部分表函数列表: 快照表函数 返回的信息 SNAPSHOT_DBM ...
- mysql日期/时间转换为字符串
将日期时间2016-05-13 16:07:50转化为字符串20160513 date_format select phone, date_format(time, '%Y%m%d%H%i%s') ...
- masonry瀑布流的使用
今天在使用masonry.pkgd.min.js瀑布流的时候遇到一个很奇怪的问题,官网显示正常,而我的就是显示不正确,然后我又查看一遍,原来要加这段代码就ok了,记录一下,怕以后还会遇到这个问题 *, ...
- 利用LD_PRELOAD hook代码
loader在进行动态链接的时候,会将有相同符号名的符号覆盖成LD_PRELOAD指定的so文件中的符号.换句话说,可以用我们自己的so库中的函数替换原来库里有的函数,从而达到hook的目的.这和Wi ...
- HDU 3980 Paint Chain (sg函数)
Paint Chain Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Pusher 消息推送测试工具
1.Pusher 简介 Pusher 是一款为 iOS.Mac App 提供推送测试的小工具. 其它下载地址 Pusher v0.7.3 for Mac,密码:p19i. 2.使用方法 使用方法简介 ...
- PreparedStatement的用法及优点
jdbc(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.statement要求开发者付出大量的时间和精力.在使用statem ...
- 转 linux进程内存到底怎么看 剖析top命令显示的VIRT RES SHR值
引 言: top命令作为Linux下最常用的性能分析工具之一,可以监控.收集进程的CPU.IO.内存使用情况.比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT).物理内存(RES). ...
- 配置IISserver
我们自己开发站点的时候 要在自己的电脑上写网页 然后我们怎么能像我们浏览互联网上的网页一样.而不是直接双击打开网页呢 这时候就要配置IISserver 让自己能够 预览自己站点的效果 以下是 ...