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的WAR包文件分析
- java的配置方式简介
1,java的配置方式简介java的配置方式是为了代替使用xml配置方式,主要使用两个注解:@Configuration//通过该注解来表明该类是一个spring的配置,相当于一个xml文件@Comp ...
- Linux中的共享链接库shared libraries
可执行文件的静态链接和动态链接静态链接会将需要的库函数在编译时一并包含, 所以体积会比较大. 使用ldd命令查看可执行文件链接的库 $ ldd /sbin/ldconfig not a dynamic ...
- Android控件进阶-自定义流式布局和热门标签控件
技术:Android+java 概述 在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何 自定义一个类似热门标签那样的流式布局吧,类 ...
- 重装wordpress
1.删除wordpress: https://blog.csdn.net/yeqinghanwu/article/details/77916912 2.uninstall lnmp 3.安装lnmp ...
- 更新卡片的zIndex
问题描述 屏幕上有若干张互相重叠的卡片,用户每点击一张卡片,就要把这张卡片的移到最上面,也就是把它的zIndex置为最大值.应该如何操作每个卡片的zIndex才能实现? 实现方案一 定义一个全局变量g ...
- [转]深入理解Java之线程池
原文链接 原文出处: 海 子 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这 ...
- [Spring学习笔记 4 ] AOP 概念原理以及java动态代理
一.Spring IoC容器补充(1) Spring IoC容器,DI(依赖注入): 注入的方式:设值方法注入setter(属性注入)/构造子注入(构造函数传入依赖的对象)/字段注入Field(注解) ...
- iOS 10 SceneKit 新特性 – SceneKit 制作 3D 场景框架
来源:scauos(@大朕东) 链接:http://www.jianshu.com/p/b30785bb6c97 开头语: 今天的主题是探索iOS10 SceneKit的新功能,你可以观看今年WWDC ...
- 【Struts2】Struts2框架的搭建
1,Struts2简介 struts1和struts2都是由Apache组织发布的,但是比较有趣的是struts2和struts1并没有“血缘关系”.在Apache发布struts1之后,当时是还是非 ...