面试题(二)—Java基础(下)
一、进程和线程
进程
(1)正在运行的程序,是系统进行资源分配和调用的独立单位。
(2)每一个进程都有它自己的内存空间和系统资源。
线程
(1)是进程中的一条执行路径。
(2)一个进程如果只有一条执行路径,则称为单线程程序。
(3)一个进程如果有多条执行路径,则称为多线程程序。
二、线程的两种调度模型
分时调度模型
所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片。
抢占式调度模型
优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的CPU时间片相对多一些。
三、实现多线程的两种方式
1.继承Thread类
A: 自定义类MyThread继承Thread类。
B: 在MyThread类中重写run()方法。
C: 创建MyThread类的对象。
D: 启动线程对象。
public class MyThread extends Thread {
@Override
public void run() {
for (int x = 0; x < 200; x++) {
System.out.println(x);
}
}
}
public class MyThreadDemo {
public static void main(String[] args) {
// 创建两个线程对象
MyThread m1 = new MyThread();
MyThread m2 = new MyThread();
// 启动线程
m1.start();
m2.start();
}
}
2.实现Runnable接口
A: 自定义类Myrunnable实现Runnable接口。
B: 在MyRunnable里面重写run()方法。
C: 创建MyRunnable类的对象。
D:创建Thread类的对象并把C步骤的对象作为参数传递。
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(Thread.currentThread().getName() + ":" + x);
}
}
}
public class MyRunnableDemo {
public static void main(String[] args) {
// 创建MyRunnable类的对象
MyRunnable m = new MyRunnable();
// 创建Thread类的对象,并把Runnable对象作为构造参数传递
Thread t1 = new Thread(my, "AAA");
Thread t2 = new Thread(my, "BBB");
t1.start();
t2.start();
}
}
问题1: run()与start()方法的区别
run()方法直接调用仅仅是普通方法。
start()方法先启动线程,然后再由JVM调用run()方法。
问题2:实现Runnable接口的优点
A:可以避免Java单继承的局限性。
B:适合相同程序程序处理同一资源的情况。
四、线程的生命周期

五、sleep()和wait()区别
(1)这两个方法来自不同的类,sleep()来自Thread类,和wait()来自Object类。
(2)sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际
上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。而wait()是Object类的非静态方法。
(3)sleep()释放资源不释放锁,而wait()释放资源释放锁;
(4)wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。
六、throw和throws区别
throw
(1)在方法体中,后面跟的是异常对象名,并且只能是一个。
(2)throw抛出的是一个异常对象,说明这里肯定有一个异常产生了。
throws
(1)在方法声明上,后面跟的是异常的类名,可以是多个。
(2)throws是声明方法有异常,是一种可能性,这个异常并不一定会产生。
七、三种获取Class对象的方式
A: getClass()方法
Person p = new Person();
Class clzz = p.getClass();
B: 类名.class
Class clazz = Person.class;
C: Class.forName("");
Class clazz = Class.forName("Person");
八、二分查找
(1)算法概念。
二分查找算法也称为折半搜索、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。请注意这种算法是建立在有序数组基础上的。
(2)算法思想。
①搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;
②如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
③如果在某一步骤数组为空,则代表找不到。
public static int binarySearch(int[] arr,int key){
int low = 0;
int high = arr.length - 1;
while(low <= high){
//防止溢出,移位也更高效,同时每次循环都要更新
int middle = low + ((high - low)>>1);
if(key == arr[middle]){
return middle;
}
else if(key > arr[middle]){
low = middle + 1;
}
else{
high = middle -1;
}
}
return -1;
}
面试题(二)—Java基础(下)的更多相关文章
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 笔试题之java基础
Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他.有些题来自网上搜集整理,有些题来自传智 ...
- 【JAVA面试题系列一】面试题总汇--JAVA基础部分
JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...
- [Java面试二]Java基础知识精华部分.
一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...
- 转载:[Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
原文:http://www.cnblogs.com/wang-meng/p/5898837.html 一:继承.抽象类与接口区别.访问控制(private, public, protected,默认) ...
- Java 208 道面试题:Java 基础模块答案
目前市面上的面试题存在两大问题:第一,题目太旧好久没有更新了,还都停留在 2010 年之前的状态:第二,近几年 JDK 更新和发布都很快,Java 的用法也变了不少,加上 Java 技术栈也加入了很多 ...
- 【面试题】Java基础部分面试题
Java基础面试题 Equals与==的区别 使用==比较原生类型如:boolean,,int,char等等, 使用equals()比较对象. 1. ==是判断两个变量或类型是不是指向同一个内存空 ...
- Java面试题(Java基础篇)
Java 基础 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...
- 实验二 Java基础(数据/表达式、判定/循环语句)
实验二 (一)实验内容 编写简单的计算器,完成加减乘除模运算. 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. 编写测试代码,测试验证. ...
随机推荐
- 零基础HTML编码学习笔记
任务目的 了解HTML的定义.概念.发展简史 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 任务描述:完成一个HTML页面代 ...
- JavaScript定时器及相关面试题
在单线程JavaScript这篇文章中,在介绍JavaScript单线程的同时,也介绍了setTimeout是如何工作的.但是对于定时器的一些内容,并没有做深入的讨论.这篇文章,会详细说说JS的两种定 ...
- NSInternalInconsistencyException attempt to delete row 2 from section 4 which only contains 0 rows before the update 问题原因
insertRowsAtIndexPaths 和 deleteRowsAtIndexPaths 同 numberOfRowsInSection 的关系 如果不处理好这个关系,大概所有的问题都是这样的: ...
- XML入门知识
什么是XML? 答:指可扩展标记语言(eXtensible Markup Language),被设计用来传输和存储数据:标签没有被预定义.您需要自行定义标签:被设计为具有自我描述性. XML和HTML ...
- 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题
一.问题分析 对于后台系统,相比大家都有所印象,知道其中的布局结构,如图: 在这种布局中我们需要将header,sidebar,footer分开,而且对于中间部分的content内容需要动态变化,即根 ...
- angular : ngModel 内部流程
angular 1.5 beta link NgModelController provides API for the ngModel directive. The controller conta ...
- PDO(PHP Data Object)数据访问抽象层
1.可以访问其它数据库2.具有事务功能3.带有预处理语句功能(防止SQL注入攻击) 访问数据库 PDO::__construct ( string $dsn [, string $username [ ...
- 关于CSS各种选择器,还有各种引入样式表的区别,import导入样式表,在介绍一些伪类选择器
(一)CSS选择器: 1.标签选择器:通过HTML的标签名直接选择该标签 2.类选择器:通过.选择器的名称{} 来对添加了class属性的标签进行选中 3.ID选择器:通过#选择器的名称{} 来对添加 ...
- Java原生API操作XML
使用Java操作XML的开源框架比较多,如著名的Dom4J.JDOM等,但个人认为不管你用那个框架都要对JDK原生的API有所了解才能更得心应手的应用.本篇就来简单了解下原生的XML API. JAV ...
- HTML&CSS Table元素详细解说
1.预热 css样式多如牛毛,我不可能一个一个去讲,那样好像背字典一样,我相信你们也不喜欢这样的方式.所以,我会在实战中慢慢和你讲解,然后,你记住一些重要的css属性就可以了.关键是,你要学会去查资料 ...