一、进程和线程

进程

(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基础(下)的更多相关文章

  1. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  2. 笔试题之java基础

    Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他.有些题来自网上搜集整理,有些题来自传智 ...

  3. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  4. [Java面试二]Java基础知识精华部分.

    一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...

  5. 转载:[Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    原文:http://www.cnblogs.com/wang-meng/p/5898837.html 一:继承.抽象类与接口区别.访问控制(private, public, protected,默认) ...

  6. Java 208 道面试题:Java 基础模块答案

    目前市面上的面试题存在两大问题:第一,题目太旧好久没有更新了,还都停留在 2010 年之前的状态:第二,近几年 JDK 更新和发布都很快,Java 的用法也变了不少,加上 Java 技术栈也加入了很多 ...

  7. 【面试题】Java基础部分面试题

    Java基础面试题 Equals与==的区别 使用==比较原生类型如:boolean,,int,char等等,  使用equals()比较对象. 1.  ==是判断两个变量或类型是不是指向同一个内存空 ...

  8. Java面试题(Java基础篇)

    Java 基础 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  9. 实验二 Java基础(数据/表达式、判定/循环语句)

    实验二 (一)实验内容 编写简单的计算器,完成加减乘除模运算. 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. 编写测试代码,测试验证. ...

随机推荐

  1. 推荐几款主流的Css Reset

    1.Eric Meyer’s “Reset CSS”(重置的很极端) 官方网址:CSS Tools: Reset CSS 2.HTML5 Doctor CSS Reset 官方网址:HTML5 Res ...

  2. xargs命令详解,xargs与管道的区别

    为什么要用xargs,问题的来源 在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以 ...

  3. windows 安装 Scrapy的套路

    我最近在琢磨scrapy爬虫框架,在windows中安装scrapy遇到了不少坑:直接 pip install scrapy 安装不成功的,百度说要安装vc2008+等等,安装这些时间太长,最后找到一 ...

  4. 徒手用Java来写个Web服务器和框架吧<第三章:Service的实现和注册>

    徒手用Java来写个Web服务器和框架吧<第一章:NIO篇> 徒手用Java来写个Web服务器和框架吧<第二章:Request和Response> 这一章先把Web框架的功能说 ...

  5. Alamofire源码解读系列(五)之结果封装(Result)

    本篇讲解Result的封装 前言 有时候,我们会根据现实中的事物来对程序中的某个业务关系进行抽象,这句话很难理解.在Alamofire中,使用Response来描述请求后的结果.我们都知道Alamof ...

  6. R语言入门(一)简介安装

    数据挖掘常用的语言有R语言,python,SQL等,其中R语言最受欢迎.(注:SQL Server包含微软研究院开发的两种数据挖掘算法:Microsoft决策树和Microsoft聚集,此外还支持第三 ...

  7. 抓包工具Wireshark的使用

    WireShark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息. WireShark界面简介 启动WireShark的界面如下: 选择网卡 wireshar ...

  8. 《新手养成记》--第一篇 iOS手机号正则判断和获取验证码

    今天是开通一个新博客开启新的一年,同时也是对自己的过去做一个告别.介绍一下博主自己,资深iOS屌丝男,今天写这个博客就是刻意拉低逼格的,前两年写的博客为了装那什么,故意写的高大上,其实呵呵哒...年假 ...

  9. 剑指offer_数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P. 并将P对1000000007取模的结果输出. 即输出P%100 ...

  10. 详解meta标签

    Meta标签详解,在网上转的,希望对大家有用 引言 您的个人网站即使做得再精彩,在"浩瀚如海"的网络空间中,也如一叶扁舟不易为人发现,如何推广个人网站,人们首先想到的方法无外乎以下 ...