程序员面试基础知识

2024-08-03

程序员面试基础知识(通用6篇)

篇1:程序员面试基础知识

Java基础

简述Java的基本历史

java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机、冰箱等

简单写出Java特点,写出5个以上,越多越好

简单的、面向对象的、分布式的、安全的、稳定的、与平台无关的、可解释的、多线的、动态的语言。

什么是Java? JAVA:一种编程语言

一种开发环境

一种应用环境

一种部署环境

请写出Java的版本分类,以及每种版本的应用方向 三种版本:

JME:是面向内存有限的移动终端.为消费性产品设计的;

JSE: 是SUN公司针对桌面开发和低端商务计算方案开发的版本。为笔记本电脑、PC机设计的;

JEE: 是一种利用JAVA 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。为企业级的、服务器端的高端应用而设计的;

描述Java技术的主要特性 java虚拟机

垃圾回收

代码安全性

描述 Java虚拟机的功能

(1)通过 ClassLoader 寻找和装载 class 文件

(2)解释字节码成为指令并执行,提供 class 文件的运行环境

(3)进行运行期间垃圾回收

(4)提供与硬件交互的平台

简述Java代码安全性(1)编译时的错误检验

(2)类装载检查,把本机上的类和网络资源类相分离,在调入类的时候进行检查,因而可以限制任何“特洛伊木马“的应用

(3)字节码校验

(4)沙箱机制,限定访问权限

描述Java垃圾回收机制

Java 编程语言解除了程序员释放内存的责任。它可提供一种系统级线程以跟踪每一次内存的分配情况。在 Java 虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的内存。垃圾收集在 Java 技术程序的生命周期中自动进行,它解除了释放内存的要求,这样能够有效避免内存漏洞和内存泄露(内存泄露就是程序运行期间,所占用的内存一直往上涨,很容易造成系统资源耗尽而降低性能或崩溃。

垃圾回收有以下特点:

(1)垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功能和行为。

(2)有一些跟垃圾回收相关的方法,比如:System.gc(),调用这些方法,仅仅是在通知垃圾回收程序,至于垃圾回收程序运不运行,什么时候运行,都是无法控制的。

(3)程序员可以通过设置对象为 null,来标示某个对象不再被需要了,这只是表示这个对象可以被回收了,并不是马上被回收。

简述Java代码的运行过程

(1)加载代码 通过类装载器装载CLASS文件

(2)校验代码 由字节码校验

(3)执行代码 由解释器将字节码转换成机器码

简述如何搭建Java开发环境 首先下载安装JDK 然后配置环境

(1)配置PATH,(2)配置CLASSPATH

(3)配置JAVA_HOME

简述classpath,path,JAVA_HOME的意义和配置方法 path 操作系统运行环境的路径

classpath JAVA运行应用程序时所需要的类包的路径

JAVA_HOME 供需要运行JAVA的程序使用

请描述:一个完整的Java文件的代码分几个部分,每部分都起什么作用,大致的写法 package 当前类所在位置

import 当前类运行时所需要的包或类

public class 类名 {

属性定义;

方法定义:

构造方法定义;

public static void main(String args [])例外{ 程序入口 语句;} }

//注释

Java代码的注释有几种?分别举例说明(1)// 单行注解

(2)/* */ 块注释

(3)/* *

* 文档注释

*/

什么是Java代码的语句,什么是Java代码的块,举例说明 语句 是一行以分号终止的代码,例:int a;

块 是以{ }为边界的一些语句的集合 例:public void tt(){}

什么是标示符?

标识符:是赋予变量、类、方法的名称。

标示符定义的规则?

首字母只能以字母、下划线、$开头,其后可以跟字母’下划线、$和数字配置CLASSPATH 首字母小写中间用大写字母隔开 标识符具有一定的含义

什么是关键字?

关键字就是编程语言与机器语言的编码约定

true、false、null、sizeof、goto、const那些是Java关键字 true、false、null 为JAVA的关键字

Java的基本数据类型有几种?分别是? short int long boolean float double char byte

请写出每种基本类型的默认值?取值范围?分别给出一个定义的例子 默认值

取值范围 示例

字节型 : 0-2^7—-2^7-1 byte b=10;

字符型 : ‘ u0000′ 0—-2^16-1 char c=’c’;

short : 0-2^15—-2^15-1 short s=10;

int : 0-2^31—-2^31-1 int i=10;

long : 0-2^63—-2^63-1 long o=10L;

float : 0.0f-2^31—-2^31-1 float f=10.0F

double : 0.0d-2^63—-2^63-1 double d=10.0;

boolean: false truefalse boolean flag=true;

在基本类型中,如果不明确指定,整数型的默认是什么类型?带小数的默认是什么类型? 整数类型 默认为 int

带小数的默认为 double

如何定义float类型和long型 float f = 1.2f

long l = 1.2L

什么是变量?

变量是用来引用一块内存区域或一个值,用标识符来表示,可以通过操作变量来操作变量所对应的内存区域或值块的值。

变量的定义规则?

以字母、$、下划线开头,其后可以跟字母、下划线、$和数字; 首字母小写,中间单词用大写字母隔开; 名称具有一定含义;

请写出Java编码约定中对下列部分的要求:类、属性、方法、包、文件名、变量、常量、控制结构、语句行、注释

类: 一个类文件中类名要和文件名相同,类名一定要以大写字母开头,单词之间用大写字母分隔

属性: 属性名首字母小写,中间用大写字母隔开。

方法: 方法名首字母小写,中间用大写字母隔开。

包: 引用包必须写在类文件的开头,有且只能有一个包,全部用小写字母。

控制结构:当语句是控制结构的一部分时,即使是单个语句,也应使用大括号将语句封闭。

语句行:每行只写一个语句,并使用四个缩进的空格,使代码更易读,注意用分号结束。

注释: 用注释来说明那些不明显代码的段落。

常量: 常量名一般用大写字母,单词之间用下划线分隔,一旦赋值不允许修改。

什么是Javadoc? 按照一定格式生成程序的文档的工具。

什么是引用类型?

用户定义类型, 它可引用类和数组。

除去基本数据类型的其他类型都是引用数据类型。

什么是按值传递?什么是按引用传递?

按值传递:就是将该值的副本传过去(基本数据类型+String类型的传递,就是按值传递)

按引用传递:就是将值的内存地址传过去(除基本数据类型+String以外类型的传递,就是引用传递)

如何创建一个新对象?如何使用对象中的属性和方法? 使用new 关键字来创建一个新的对象;

通过对象的实例用”.“(点)来调用对象中的属性和方法;

静态的方法和属性,也可以直接用类名”.“(点)来调用;

简述new关键字所做的工作

new 创建一个对象,并为对象分配一块内存。

简述”=” 和”= =”的功能和区别 “=” 赋值,“= =”当比较基本数据类型的时候,判断前后两个值是否相等;

当比较引用数据类型的时候,判断= =前后两个值的内存地址是否相等;

区别:

= :为赋值表达式

= = :为逻辑表达式

什么是实例变量?什么是局部变量?什么是类变量?什么是final变量?

实例变量:

类中定义的变量,即类成员变量,如果没有初始化,会有默认值;

局部变量:

在方法中定义的变量,必须初始化;

类变量:

用static修饰的属性;

final变量:

用final 修饰的变量,简述上述各种变量的定义规则和使用规则?

实例变量: 不需要static关键字来声明,需要类的实例(对象)调用(用”.“);

类变量: 用static修饰,可以用类名调用,也可以用类的实例调用;

局部变量: 在方法内任意定义变量即为局部变量;

final变量: 一旦赋值,不可以再修改的变量;

final属性只允许赋值一次,且只能通过构造方法赋值,定义后也就是一个常量;

final修饰的变量,只允许赋值一次

a++和++a的区别?

a++ : 先使用,后加1

++a : 先加1,后使用

请描述instanceof、?:、&、&&各自的功能

instanceof :用来判断某个实例变量是否属于某种类的类型。

? : 三目运算符:

表达式1?表达式2:表达式3

如果表达式1为true,执行表达式2,否则执行表达式3

&: 位运算:按位与 |

&&: 逻辑运算:逻辑与

请描述>>、<<、>>>的功能

10>>4 :算术或符号右移位运算符

<< :算术或符号左移位运算符 >>> :逻辑或无符号右移位运算符

请描述什么是强制类型转换?什么是自动类型转换?什么是向上造型?并分别举例说明 强制类型转换:在一个类型前面加(),来强制转换

long l = 9L;

int i =(int)l;

自动类型转换:

int i = 5;

String str = “”+i;

向上造型:把范围小的造型为范围大的类型:

int i = 2;

long l = i;

请写出完整的if条件控制语句的结构 if(布尔表达式){ 语句

}else{

语句

}

请写出完整的switch语句的结构 switch(字符){

case 字符: 语句

break;

case 字符: 语句

break;

default:语句

}

请写出完整的for语句的结构 for(初始语句;条件语句;步长){ }

请写出完整的while语句的结构 while(boolean语句){ }

请写出完整的do while语句的结构 do{

}while(boolean语句);

请描述break 和 continue的功能和用法 break:终止(跳出)最近的循环

continue:跳出本次循环,执行下一次循环

定义一个一维的int数组,先创建它,并初始化它,给它赋值,然后输出其中的一个值 public class Arr{

public static void main(String args[]){ int a[] = new int[5];

a={1,2,3,4,5};//错误 , 只能在初始化时这样做

a[0]=1;

a[1]=2;

System.out.println(a[0]);} }

定义一个一维的A类型数组,直接定义并赋值,然后输出其中的一个值 public class A{

public static int i;

public static void main(String args[]){

A aa = new A();

A bb = new A();

A a[] = {aa,bb};

a[0].i=2;

System.out.println(a[0]);} }

把上面的数组改成2维的数组 public class A{

public static int i;public static void main(String args[]){

A a[ ][ ] = new A[5][5];

a[0][0].i=2;

System.out.println(a[0][0]);} }

举例说明数组拷贝方法的使用:arraycopy方法 public class A{

public static void main(String args[]){

int a[] = new int[5];

int b[] = new int[5];

System.arraycopy(a[5],0,b[5],0,a.length)

System.out.println(b[0][0]);} }

什么是构造和析构方法?功能是?

构造方法:每个类至少有一个构造方法,类初始化时调用的方法

1.方法名和类名相同

2.无返回值类型

格式:访问权限 类名(参数列表){};

1.自己定义构造后,就没有默认的构造方法 2.无构造方法时,默认为空参的构造方法(无参数,方法体为空)析构方法:finalize

类销毁时,自动调用方法

当对象在内存中被删除时,自动调用该方法

在此方法中可以写回收对象内部的动态空间的代码

简述Java的访问修饰符类型?分别有什么功能? public 公开的,任何一个类都有可以访问

protected 同包同类,只可被它的子类访问

default 只能被同一个包中类访问

private 私有的,只能在本类中被访问

分别说明:在类上、在属性上、在方法上能使用哪些访问修饰符 在类上:public default final

在方法上: 访问权限:public protected private default

方法修饰符:static final

返回类型:void

在属性上:public protected private default

static final

简述什么是包?包的功能

包:对所定义的多个JAVA类进行分组,将多个功能相关的类定义到一个包(文件)中。

功能:1.易于查找和使用适当的类

2.包不止包含类和接口,还可以包含其它包,形成层次的包空间

3.有助于避免命名冲突

请写出5个以上的JDK中的包,以及他们的基本功能

java.awt: 包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面

java.lang: 提供java编成语言的程序设计的基础类

java.io:

包含提供多种输出输入功能的类,java.net:

包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET,java.applet: 包含java小应用程序的类

java.util:

包含一些实用性的类

什么是包装类?Java中都有哪些包装类

在JDK中针对各种基本类型分别定义相应的引用类型 ————–称为封装类 Boolean Byte Short Integer Long Float Double Character

OOP(面向对象)语言的三大特征是? 封装性,继承性,多态性

分别表述类的三大特性及其他们的功能

封装:隐藏类的实现细节、迫使用户去使用一个接口去访问数据、使代码更好维护

继承:子类可以直接继承使用父类的方法,程序员只需要做的是定义额外特征或规定将适用的变化

多态性:同一个行为具有多个不同表现形式或形态的能力

如何实现继承?继承的规则? public class A extends B{ }

单继承性

构造方法不能继承

super引用父类,调用父类的属性,方法

当子类中出现与父类的方法名,返回类型,参数列表相同的方法时要覆盖此方法 简述this和super的功能和用法 this :

能访问除构造方法以外所有的属性、方法,通过this.来调用方法和属性 不可以在静态方法中使用,在调用其它构造方法时,必须放在该构造方法的第一行

在构造方法中使用this(参数列表),相当于调用本类的其它构造方法,它必须作为构造方法的第一句

super :访问父类

super.点取父类中被子类隐藏的方法和属性,通过 super(参数列表)来调用父类的属性和方法,在调用父类的构造方法时必须放在子类构造方法里的第一行;

如何确定在多态的调用中,究竟是调用的那个方法? new的是哪一个类就是调用的哪个类的方法。

请描述方法定义的完整的语法结构

权限修饰符 修饰符 返回类型 方法名(参数)例外{

方法体;}

什么是重载?

在一个类中出现方法名相同,但参数列表不同时,这种情况就是重载。

简述重载的规则 方法名称必须相同;

参数列表必须不同(个数不同,或类型不同,或参数排列顺序不同); 与返回类型无关;

什么是方法的覆盖?什么情况下出现? 方法覆盖:

子类可以修改从父类继承过来的行为,也就是说子类可以创建一个与父类方法有不同功能的方法,但具有相同的:名称、返回类型名和参数列表。

在父子类的情况下出现时。

方法覆盖的规则?

方法名要和父类中被覆盖的方法名相同,返回类型相同,参数列表相同。访问权限要大于等于被覆盖方法的权限。例外列表要小于等于被覆盖方法的例外列表。

static修饰符的功能是?可以用在什么地方?怎么访问? static 修饰符功能:

共用一块内存区域,也就是用static修饰的变量或成员方法对所有类的实例都是相同的 静态成员方法和静态变量的优点在于他们能在没有创建类的任何一个实例的情况下被引用。可以用在方法或属性上 访问方式:

直接使用类名调用

new 一个实例,用实例调用

static的基本规则

类中的静态方法只可以调用静态的属性和方法,不允许调用非静态的属性和方法。静态变量为类变量,可以用类名直接调用静态的属性和方法。静态方法中不允许出现this和super 构造方法不允许声明static 非静态变量为实例变量,通过实例调用 静态方法不能被非静态方法覆盖

final修饰符的功能是?可以用在什么地方? 功能:final标记所有通用的功能,不能随意更改

可以用在类、属性和方法上

final的基本规则

final修饰的类不能被继承

final修饰的成员变量只允许赋值一次,且只能通过构造方法里赋值。final修饰的局部变量即为常量,只能赋值一次。final修饰的方法不允许被子类覆盖。

什么是抽象方法,什么是抽象类

用abstract修饰的方法,只有方法的声明,而没有方法的实现,就叫抽象方法。

用abstract修饰的类,就叫抽象类。

抽象类的规则

抽象类内部可以没有抽象方法 必须用abstract修饰

不能够直接使用抽象类,必须通过子类继承并且实现 抽象方法不允许被private修饰

什么情况下使用抽象类

当一个类的一个或多个方法是抽象方法时;

当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时; 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时;

equals方法和”= =”的功能和区别 功能:判断对象是否相等

区别:

equals方法比较的是对象的值

= =:比较的是对象值的内存地址,对基本数据类型来说= =比较的是数值

toString方法的功能和基本写法 返回一个String类型

public String toString(){

return “”;

}

String的方法的功能和基本使用方法,请描述5个以上

substring(参数1,参数2);功能:取字符串中参数1到参数2的的所有字符;“String”.subString(0,1);

replace(参数1,参数2);功能:用参数1中的值替换字符串中所有参数2的值 “String”.replace(ing,tt);

equals();功能:判断两个字符串是否相等 “String”.equals(“tt”);trim();功能:去掉字符串两边的空格 “String”.trim();

indexof();功能:查找字符串中参数所在位置,并返回字符串第一个出该参数的下标

“String”.indexOf(“ing”);

split();功能:根据参数分割该字符串 “String”.split(“-”);

为什么使用StringBuffer类?有什么功能和优点? –只创建一个对象

–StringBuffer 对象的内容是可以被修改的

–除了字符的长度之外,还有容量的概念

–通过动态改变容量的大小,加速字符管理

举例说明如何使用StringBuffer StringBuffer sb = new StringBuffer();

sb.append(“aaa”);

如何使用Java读写系统属性? 读:

Properties props = System.getProperties();

Enumeration prop_names = props.propertyNames();

while(prop_names.hasMoreElements()){

String prop_name =(String)prop_names.nextElement();

String property = props.getProperty(prop_name);

System.out.println(“Property ‘” + prop_name + “‘ is ‘”+ property + “‘”);}

写:

System.setProperties(props);

简述properties文件的结构和基本用法

结构:扩展名为properties的文件,内容为key、value的映射,例如”a=2″

用法:

public class Test {

public static void main(String args[]){ try {

String name = “test.properties”;

InputStream in = new BufferedInputStream(new FileInputStream(name));

Properties p = new Properties();

p.load(in);

System.out.println(“a的值==” + p.getProperty(“a”));

} catch(Exception err){

err.printStackTrace();} } }

什么是接口?接口的定义规则?

接口是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

public interface Tt {

public void outPut();

public int tt();}

接口的作用?为什么使用接口? 多重继承

封装、隔离

功能,实现的分离

多态

便于后期维护

接口是可插入性的保证。

什么是多重接口

就是一个类实现多个接口

描述接口的基本思想? 封装 隔离

接口及相关机制的最基本作用在于:通过接口可以实现不相关类的相同行为,而不需考虑这些类之间的层次关系。

根据接口可以了解对象的交互界面,而不需了解对象所属的类。

面向对象程序设计讲究”提高内聚,降低耦合”。

如何在代码中使用接口?

public class MyCast implements Tt{

public void outPut(){}

public int tt(){

return 0;} }

举例说明如何把接口当作类型使用 public interface Animal(){

public void tt();}

public class Dog implements Animal{

public void tt(){} }

Animal ani = new Dog();

如何选择接口和抽象类?为什么? 优先选用接口,尽量少用抽象类

在下列情况下选择抽象类:需要定义子类的行为,又要为子类提供共性的功能。

什么是异常,异常的分类?

程序中导致程序中断的一些情况叫做异常,一般程序员可以处理。

异常分为运行时异常和非运行时异常(一般异常)

运行时异常是指因设计或实现方式不当导致的问题。也可以说,是程序员的原因导致的,本来可以避免发生的情况。例如:BufferOverflowException, ClassCastException,IndexOutOfBoundsException,ArithmeticException。出现这些异常的代码不需要try块包围。

非运行时异常是指除运行时异常以外所有的异常,出现这些异常的代码必须用try块包围。例如:FileNotFoundException,EOFException,简述处理异常的两种方式?

抛出(throws)和catch语句处理

简述try块的功能和规则

try块内部一般写一些编程人员认为可能会出现异常的代码,使程序运行时不会因为出现异常而中断。

简述catch块的功能和规则

功能:可以截获所声明的异常,并在语句块内对其进行处理

规则:catch(Exeption e){

e.printStackTrace();

}

简述finally块的功能和规则

finally块一般写一些不论是否发生异常都必须执行一次的代码

例如关闭与数据库的连接等

简述throw和throws的功能和使用方法 throw 指编程人员主动抛出一个异常

throw new NullPointerExeption();

throws指程序遇到异常情况自动的被动抛出一个异常

public void test()throws Exeption{}

异常的分类? 错误(Error): JVM 系统内部错误、资源耗尽等严重情况,程序员不可控制

例外(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,程序可以控制

什么是预定义异常

java程序中预先定义好的异常叫做预定义异常

简述自定义异常的规则 写一个类继承Exception

用户自定义异常通常属Exception范畴,依据惯例,应以Exception结尾,应该由人工创建并抛出。

什么是断言?

用来证明和测试程序的假设。

如何使用断言?举例说明

一种是assert<<布尔表达式>>;另一种是assert<<布尔表达式>>:<<细节描述>>。

assert a= =10 : “这里a等于10″;

集合框架

什么是集合?什么是元素? 可以包含其他对象的简单对象就叫集合

集合框架中所包含的对象就叫做元素

描述出Java集合框架中集合的接口关系 Collection—-Set和List

Set—-HashSet和SortedSet

List—-ArrayList和LinkedList

Map—-HashMap、SortedMap和TreeMap

代码示例:Collection接口的使用,包括如何定义、初始化、赋值、取值、修改值除值 Collection col = new ArrayList();

String oldValue = “abcd”;

String newValue = “1234″;

//增加

col.add(oldValue);

Iterator it = col.iterator();

while(it.hasNext()){

//取值

String str =(String)it.next();

if(str.equals(oldValue)){

//删除

col.remove(oldValue);//修改

col.add(newValue);} }

代码示例:List接口的使用,包括如何定义、初始化、赋值、取值、修改值、删值 List col = new ArrayList();

String oldValue = “abcd”;

String newValue = “1234″;

col.add(oldValue);

Iterator it = col.iterator();

while(it.hasNext()){

String str =(String)it.next();

if(str.equals(oldValue)){

col.remove(oldValue);

col.add(newValue);} }

代码示例:Set接口的使用,包括如何定义、初始化、赋值、取值、修改值、删值 Set col = new HashSet();

String oldValue = “abcd”;

String newValue = “1234″;col.add(oldValue);

Iterator it = col.iterator();

while(it.hasNext()){

String str =(String)it.next();

if(str.equals(oldValue)){

col.remove(oldValue);

col.add(newValue);} }

代码示例:Map接口的使用,包括如何定义、初始化、赋值、取值、修改值、删 Map map = new HashMap();

String oldValue = “abcd”;

String newValue = “1234″;

//增加

map.put(“1″,oldValue);

Set set = map.keySet();

Iterator it = set.iterator();

while(it.hasNext()){

String key =(String)it.next();

//取值

String value = map.get(key);}

//修改

map.put(“1″,newValue);

//删除

map.remove(“1″);}

描述List接口、Set接口和Map接口的特点 List接口中的对象按一定顺序排列,允许重复

Set接口中的对象没有顺序,但是不允许重复

Map接口中的对象是key、value的映射关系,key不允许重复

如何给集合排序? 实现comparable接口

IO 什么是流?可画图说明

流是要传输的数据在源和目的地之间运行的轨迹。

描述I/O流的基本接口和类的结构

代码示例:使用URL流,读取网页代码 import java.io.*;import java.net.URL;import java.net.URLConnection;public class ReadURL { public static void main(String[] args)throws Exception { URL url = new URL(“http://bbs.tarena.com.cn”);//建立封装统一资源定位符的类 URLConnection uc = url.openConnection();//打开连接

InputStreamReader isr = new InputStreamReader(uc.getInputStream());BufferedReader br = new BufferedReader(isr);

//传输数据 while(true){ String temp = br.readLine();if(temp==null){ break;} System.out.println(temp);} br.close();} }

什么是Unicode?

是一种字符的编码方式,占16位字节,Java 技术使用 Unicode 来表示字符串和字符。

代码示例:如何使用Reader和Writer来进行输入输出 //Writer写入操作

FileOutputStream fos=new FileOutputStream(“a.txt”);

OutputStreamWriter osw=new OutputStreamWriter(fos);

BufferedWriter bw=new BufferedWriter(osw);

bw.write(“欢迎来到java快车”);

bw.close();

//Reader读取操作

FileInputStream fis=new FileInputStream(“a.txt”);

InputStreamReader isr=new InputStreamReader(fis);

BufferedReader br=new BufferedReader(isr);

String str=br.readLine();

System.out.println(str);

什么叫保持?什么是可序列化?如何实现可序列化?

将一个对象存放在某种类型的永久存储器上(比如硬盘,光盘,软盘等),称为保持。标识一个类可以被持久化,叫序列化,也叫串行化或持久化。表示这个类中的数据可以按流式输出。

实现可序列化的方法:实现java.io.Serializable接口。

代码示例:如何读写对象流 //读

try {

String str = “123″;

FileOutputStream f = new FileOutputStream(“test.txt”);

ObjectOutputStream s = new ObjectOutputStream(f);

s.writeObject(str);

f.close();

}catch(Exception e){

e.printStackTrace();} //写

try {

FileInputStream f = new FileInputStream(“test.txt”);

ObjectInputStream s = new ObjectInputStream(f);

str =(String)s.readObject();

f.close();

}catch(Exception e){

e.printStackTrace();}

简述File类的基本功能

处理文件和获取文件信息;文件或文件夹的管理。

概括一句话就是:除了读写文件内容其他的都可以做。

代码示例:如何使用随机文件读写类来读写文件内容 RW表示文件时可读写的

读:

try{

RandomAccessFile f = new RandomAccessFile(“test.txt”, “rw”);

long len = 0L;

long allLen = f.length();

int i = 0;

while(len < allLen){

String s = f.readLine();

if(i > 0){

col.add(s);} i++;

//游标

len = f.getFilePointer();} }catch(Exception err){

err.printStackTrace();}

写:

try{

RandomAccessFile f = new RandomAccessFile(“test.txt”, “rw”);

StringBuffer buffer = new StringBuffer(“n”);

Iterator it = col.iterator();

while(it.hasNext()){

buffer.append(it.next()+ “n”);

}

f.writeUTF(buffer.toString());

}catch(Exception err){

err.printStackTrace();}

代码示例:如何使用流的基本接口来读写文件内容 try{

DataInputStream in =

new DataInputStream(new BufferedInputStream(new FileInputStream(“Test.java”)));

String currentLine=null;

while((currentLine = in.readLine())!= null){

System.out.println(currentLine);}

}catch(IOException e){

System.err.println(“Error: ” + e);

}

多线程

什么是线程? 轻量级的进程

线程的三个部分是? 处理机

代码

数据

为什么使用多线程 使UI响应更快

利用多处理器系统

简化建模

代码示例:Java中实现多线程的两种方式,包括如何定义多线程,如何使用多线程 实现Runnable接口

class Thread1 implements Runnable{

public void run(){

//run里一般写一个while(true)循环

System.out.println(“Runnable“);

} }

public class Test{

public static void main(String[] a){

Thread1 r = new Thread1();

Thread t1 = new Thread(r);

Thread t2 = new Thread(r);

t1.start();

t2.start();

} }

继承Thread

class Thread2 extends Thread{

public void run(){

System.out.println(“extends“);} }

public class Test{

public static void main(String[] a){

Thread t = new Thread2();

t.start();

}

}

如何实现线程的调度?如何暂停一个线程的运行 调度用wait和notify,—-

sleep()

什么是线程的优先级

判断哪个线程先执行的级别

简述sleep方法和wait方法的功能和区别 sleep是让线程休眠一段时间

wait是让线程挂起

什么是守候线程

隐藏在后台持续运行的线程

什么是临界资源

指多个线程共享的资源

什么是互斥锁,Java中如何实现

用来保证在任一时刻只能有一个线程来访问临界资源的那个标记

在Java中使用

用在对象前面限制一段代码的执行

用在方法声明中,表示整个方法为同步方法。

什么是死锁?如何避免?

如果程序中有多个线程竞争多个资源,就可能会产生死锁。当一个线程等待由另一个线程持有的锁,而后者正在等待已被第一个线程持有的锁时,就会发生死锁。

要避免死锁,应该确保在获取多个锁时,在所有的线程中都以相同的顺序获取锁。尽量少用临界资源。

简述wait和notify,notifyAll的使用

被锁定的对象可以调用wait()方法,这将导致当前线程被阻塞并放弃该对象的互斥锁,即解除了wait()方法的当前对象的锁定状态,其他的线程就有机会访问该对象。

notify使等待队列上的一个线程离开阻塞状态

notifyAll使等待队列上的所有线程离开阻塞状态

Socket编程

什么是url?基本的格式是? 统一资源定位器

Http://:port

简述IP,Port,TCP的基本功能 IP代表网络位置

Port代表端口号

TCP可保证不同厂家生产的计算机能在共同网络环境下运行,解决异构网通信问题,是目前网络通信的基本协议

简述Java网络模型的基本功能 描述服务端和客户端的连接过程

简述Java网络编程究竟做些什么?如何做? 1.建立连接

2.准备输出的数据,流式输出

3.流式输入,编程业务需要的格式

4.关闭连接

服务器分配一个端口号。如果客户请求一个连接,服务器使用accept()方法打开socket连接。

客户在host的port端口建立连接。

服务器和客户使用InputStream和OutputStream进行通信。

代码示例:基于Socket编程 try {

ServerSocket s = new ServerSocket(8888);

while(true){

Socket s1 = s.accept();OutputStream os = s1.getOutputStream();

DataOutputStream dos = new DataOutputStream(os);

dos.writeUTF(“Hello,” +s1.getInetAddress()+ “port#” + s1.getPort()+ “nbye!”);

dos.close();

s1.close();}

}catch(IOException e){

System.out.println(“程序运行出错:” + e);}

TCP和UDP区别

TCP(传输控制协议)和UDP(用户数据报协议)是传输层协议

TCP是面向连接的可靠数据传输协议,能保证传输内容的完整和准确;数据传输的辅助开销大,效率低

UDP: 是无连接的,不可靠地传输协议,不能保证传输内容的完整和准确,对信息的适时要求比较高

设计模式

什么是设计模式?

就是经过实践验证的用来解决特定环境下特定问题的解决方案。

设计模式用来干什么? 寻找合适的对象

决定对象的粒度

指定对象的接口

描述对象的实现

运用复用机制

重复使用经过实践验证的正确的,用来解决某一类问题的解决方案来达到减少工作量、提高正确率等目的什么是对象粒度

对象中方法的大小就是粒度

基本的Java编程设计应遵循的规则? 面向接口编程,优先使用对象组合设计模式的应用范围

所能解决的特定的一类问题中

简述什么是单例模式,以及解决的问题,应用的环境,解决的方案,应用时应注意什么? 解决的问题:在任何时间内只有一个类实例存在的模式。

应用环境:需要有一个从中进行全局访问和维护某种类型数据的区域的环境下使用单例模式。

解决方案:保证一个类只有一个类实例存在。

本质:控制实例的数量。

注意:要合理的使用单例,避免单例成为瓶颈。

代码示例:单例模式的两种实现方法,并说明优缺点 public class Test{

private static Test test = new Test();

public Test(){

}

public static Test getInstance(){

return test;} }

public class Test{

private static Test test = null;

private Test(){

}

public static Test getInstance(){

if(test==null){

test = new Test();

}

return test;

} }

第一种方式:装载类的时候就创建类的实例,用空间换时间。

第二种方式:延迟装载,不需每次都创建一个类实例,而只是在第一次使用时创建,有效的利用资源,用时间换资源。

简述什么是工厂模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 利用工厂来解决接口选择的问题的模式。

应用环境:当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定,创建的对象时,就需要用到工厂模式。

解决方案:定义一个创建对象的类,在类的方法中决定具体实例化哪一个类。

本质:就是根据不同的情况来选择不同的实现类,重在选择。

代码示例:工厂模式的实现方法 单独是使用工厂:

public class Factory{

public static Sample creator(int which){

if(which==1){

return new SampleA();

}else if(which==2)

return new SampleB();

}

}

}

工厂+单例:

public class MyFactory{

public static MyFactory f = null;

public MyFactory(){ }

public static MyFactory getInstance(){

if(f==null){

f=new MyFactory();} }

public DBDAO getDAO(){

return new DBDAOImpl();} }

简述什么是值对象模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 用来把一组数据封装成一个对象的模式

解决问题:在远程方法的调用次数增加的时候,相关的应用程序性能将会有很大的下降

解决方案:使用值对象的时候,可以通过仅仅一次方法调用来取得整个对象,而不是使用多次方法调用以得到对象中每个域的数值

本质:封装数据。

代码示例:值对象模式的实现方法 步骤:

public class UserModel{

private String userId;

private String userName;

public void setUserId(String id){

this.userId = id;

}

public String getUserId(){

return userId;

}

public void setUserName(String name){

this.userName = name;

}

public String getUserName(){

return userName;

}

}

简述什么是DAO模式,以及他解决的问题,应用的环境,解决的方案,模式的本质 数据访问对象

解决问题:根据数据源不同,数据访问也不同。根据存储的类型(关系数据库、面向对象数据库、纯文件等)和供应商实现不同,持久性存储(如数据库)的访问差别也很大。如何对存储层以外的模块屏蔽这些复杂性,以提供统一的调用存储实现。程序的分布式问题

解决方案:将数据访问逻辑抽象为特殊的资源,也就是说将系统资源的接口从其底层访问机制中隔离出来;通过将数据访问的调用打包,数据访问对象可以促进对于不同数据库类型和模式的数据访问。

本质:分层,是系统组件和数据源中间的适配器。(一层屏蔽一种变化)

代码示例:DAO模式的实现方法

什么是框架?框架的优点?

框架是能够完成一定功能的半成品

1.优点:完成一定的功能、提供一个精良的应用程序架构

2.框架都是以接口的形式出现

3.应该了解框架完成的功能、框架的API接口、框架的功能是怎么实现的什么是开放-封闭法则(OCP)可扩展但是不可以更改已有的模块

对扩展是开放的,对修改是封闭

什么是替换法则(LSP)使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用。

如何综合使用我们学过的设计模式来构建合理的应用程序结构

是采用接口进行隔离,然后同时暴露值对象和工厂类,如果是需要数据存储的功能,又会通过DAO 模式去与数据存储层交互。

构建常用的合理的Java应用包结构 Ui(表现层)

business–factory,ebi,ebo

dao–factory,dao,impl

awt、swing 什么是GUI中的容器?什么是GUI中的组件?

容器:能包含其他container和其他component的component。

组件:在设计上能实现一定功能的封装体;

简述AWT中的Frame、Panel和组件的关系

组件放在Panel上,而多个Panel可以叠加到Frame上,Frame一般只有一个,各个Panel可以互相在Frame上切换

简述如何使用一个组件

初始化,加到容器中,注冊事件,实现相应的事件

Panel pan = new Panel();

TextField td = new TextField();

td.setText(“this is in a TextField.”);

pan.add(td);

描述一个GUI界面的基本构成? Frame,Panel,組件

Popmenu

如何控制外观,如颜色、字体等? 可使用setColor(),setFont()方法

例如: Frame f = new Frame();

Font font = new Font(“TimesRoman”, Font.PLAIN, 14);

f.setColor(Color.red);

f.setFont(f);

什么是布局管理器?

用来管理GUI界面中组件的分布情況,负责决定布局方针以及其容器的每一个子组件的大小

描述每种布局管理器的基本特点

FlowLayout 从左到右分布,排满推到下一行

BorderLayout 上下左右中分布

CardLayout 卡片式分布

GridLayout 网格式分布

XYLayout 坐标分布

什么是JFC(Java基础类)?

是关于GUI组件和服务完整集合,主要包括5个API:

AWT,JavaD,Accessibility,Drag&Drop,Swing

提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包;

Swing和AWT的区别?

Swing提供了更完整的组件,引入了许多新的特性和能力。Swing API是围绕着实现AWT 各个部分的API 构筑的。

AWT 采用了与特定平台相关的实现,而绝大多数Swing 组件却不是这样做的,因此Swing 的外观和感觉是可客户化和可插的。

什么是双缓冲?

在后台进行界面的更新,然后在前台进行界面交换

功能:双缓冲可以改善一个被频繁改变的组件的外观

描述GUI的事件机制

事件源:是一个事件的产生者,或产生事件的组件对象

事件监听器:调用事件处理方法的对象

事件处理器:就是一个接收事件、解释事件并处理用户交互的方法。

描述Swing应用程序的基本结构? 组件定义

初始化界面

各种事件处理方法

各种适配类

描述表现层的基本功能? 展示数据

人机交互

收集参数、调用逻辑层api

描述在开发Swing应用程序中,一般都要写那些代码?都写到什么地方? 一般要在类的初始化的时候给组件赋值,写在jinit的方法里面

一般要在按扭的事件处理中写收集参数,组织参数,调用业务接口的方法

对于GUI组件而言,最主要的方法是哪些? 初始化

如何给组件初始化

如何从组件中取值

设计组件的属性

如何学习GUI组件的用法?

主要学会组件的定义、取值、赋值的方法

类比学习

JavaScript

什么是Javascript JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。

Java和Javascript的区别

1、基于对象和面向对象

Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象。

JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象(Object Based)和事件驱动(Event Driver)的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用。

2、解释和编译

两种语言在其浏览器中所执行的方式不一样。Java的源代码在传递到客户端执行之前,必须经过编译,因而客户端上必须具有相应平台 上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。

JavaScript是一种解释性编程语言,其源代码在发往客户端执行之前不需经过编译,而是将文本格式的字符代码发送给客户编由浏览器 解释执行。

3、强变量和弱变量

两种语言所采取的变量是不一样的。

Java采用强类型变量检查,即所有变量在编译之前必须作声明。

JavaScript中变量声明,采用其弱类型。即变量在使用前不需作声明,而是解释器在运行时检查其数据类型,4、代码格式不一样

Java是一种与HTML无关的格式,必须通过像HTML中引用外媒体那么进行装载,其代码以字节代码的形式保存在独立的文档中。

JavaScript的代码是一种文本字符格式,可以直接嵌入HTML文档中,并且可动态装载。编写HTML文档就像编辑文本文件一样方便。

5、嵌入方式不一样

在HTML文档中,两种编程语言的标识不同,JavaScript使用来标识,而Java使用„来标识。

6、静态联编和动态联编

Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查。

JavaScript采用动态联编,即JavaScript的对象引用在运行时进行检查,如不经编译则就无法实现对象引用的检查。

Javascript的运行环境 具备javascript运行器的如何在web页面加入Javascript,请写出两种方式并示例

篇2:程序员面试基础知识

也就是说,如何通过笔试在短时间内了解他的编程能力和习惯。

[面试C程序员,笔试C语言基础,哪些知识点可以考察]

篇3:程序员面试攻略 (原书第3版)

出版时间:2014-01-01

ISBN:9787111444343

所属分类:

图书>计算机与互联网>编程语言与程序设计

顶级软件公司的程序设计面试通常是很艰难的, 即使是非常优秀的程序员, 如果没有经历过这类面试并进行充分的准备, 也很难通过。拥有扎实的编程技能和丰富的计算机基础知识通常还不足以让你轻松通过这类面试, 你还需要掌握面试中的沟通技巧与答题技巧。这样才能在有限的面试时间中让面试官了解你的真实能力。

本书深入探究了顶级软件公司的程序设计面试过程, 并且对可能出现的面试题目进行了分类汇总, 引导你学习解决各类问题的方法.而不是通过罗列大量面试问题, 通过死记硬背来教你准备程序设计面试。此外, 由于程序设计题目干变万化, 通过死记硬背不能给你通过面试带来实质性的帮助。

篇4:物理程序性知识教学探索

现代知识观根据反映活动的形式不同,将知识分为陈述性知识和程序性知识.程序性知识也叫操作性知识,是个体难以清楚陈述、只能借助于某种作业形式间接推测其存在的知识.这类知识主要用来回答“怎么想”“怎么做”的问题.

获得程序性知识的过程体现了知识学习的连续性和完整性,也体现了能力的养成途径,因此,对于克服传统教学中技能与知识相脱节的形式主义倾向及发展学生的能力有很重要的理论与实践意义.

2 典型案例

基于高中学生的特点,下面以《牛顿第二定律》的教学为例,采用科学探究和变式练习教学对物理学科中的程序性知识的教学进行探索.

首先明确任务是科学探究a与F、m的定量关系.由于任务比较复杂,学生没有头绪,所以我们采用“小步子”教学引导学生将任务分为三步来探究.

第一步,大胆实验,自主探究.学生根据控制变量法设计初步实验方案如图1.小车作为研究对象,通过在小车上增减砝码改变小车质量,小车受到的拉力大致是钩码的重力,通过增减钩码来改变小车受到的拉力.学生观察小车的运动,研究小车的加速度a与拉力F及小车质量m的关系.

第二步,改进装置,定量求证.因为初步实验中没有测量a,所以无法定量a与F、m的关系.针对实验中的问题,我们引导学生将课堂进一步推进,根据s=at2/2可知在t相同时,a1/a2=s1/s2,将比较难测量的加速度转换为位移的测量,然后确定新的实验方案,改进实验装置如图2.该方案操作简单,不必测量时间,形象直观,学生也能自主地处理数据,比较准确地得到结论,大大地激发了学生的兴趣.

第三步,趁热打铁,逐层深入.充分发挥教师的主导作用,设置了几个具有思维梯度的问题让学生讨论,层层递进,以达成教学目标.问题1:力的单位“牛顿”的意义是什么?问题2:牛顿第二定律更一般的表述是什么?问题3:定律中的力是指什么力?问题4:加速度到底取决于什么?如何认识a=Δv/Δt与a=F/m?

在得到结论之后,通过变式练习,应用定律来解决生活生产中的实际问题.我们选择“汽车是否超速追尾”问题为例,首先引导学生明确已知量、待求量,寻找各量之间的关系,代入求解,解决实际问题,然后,总结“解决已知力求运动”的共同解题过程如图3.接着以“吊车对缆绳的要求”作为学生的巩固练习,提炼“解决已知运动求力”的共同解题过程如图3.最后,实践操作——学生自制加速度计,学生设计加速度计的原理图、制作加速度计并检测小车运动的加速度.

3 几点体会

3.1 陈述性知识和程序性知识的学习是互为条件、互相促进和相互转化的

牛顿第二定律的内容是陈述性知识,当学生能够复述出定律时,表明学生已经完成了陈述性知识的学习.但是,不能被学生用言语陈述的表象所蒙蔽,更不能以言语陈述为最终教学目的,应促进学生相应技能的形成与发展.所以,在教学中我们应该创设问题情境,以如何获得新的陈述性知识来设计教学策略,给学生充分的时间和机会去探究、去理解、去讨论,将静态的陈述性知识由动态的程序性知识获得.接着,教师提供适当的变式练习,让学生又将静态的知识转化为动态的技能,掌握程序性知识学习的高级阶段——解决实际问题.

总之,陈述性知识的获得常常是学习程序性知识的基础,程序性知识的获得又为获取新的陈述性知识提供了可靠保证.

3.2 科学探究是获得程序性知识的一种非常有效的方法

如果学生只是记住了物理概念和定律的内容,至于结论怎么来的、探究的过程和方法是什么都没有体验、没有思考,那么只能说明学生对概念和规则的学习还处于陈述性阶段,尚未转化为能力和技能.

课程标准要求学生“理解牛顿运动定律.”至于如何让学生理解,与此相关的程序性知识还需要教师自己总结开发.科学探究和物理实验是获得程序性知识的一种有效方法.新问题进入原有的命题网络,与原有知识形成联系,学生通过探究、实验习得学习的过程和方法,将原有的知识进一步推进,建立一种新的陈述性知识.学生在此过程中获得程序性知识,提高能力,发展技能.学生在已经具备牛顿第一定律与惯性概念的基础上,通过探究加速度与力、质量的定量关系,得到牛顿第二定律.实验过程中,学生在实际的学习情景中解决具体的物理问题,设计实验方案、改进装置、实验操作、记录数据、总结结论等等,学生不仅牢固地掌握了知识,更重要的是思维能力的批判性、逻辑性、创造性都得到了充分的发展,有利于创造性人才的培养.

3.3 变式练习是程序性学习非常关键的一步

我们经常看到一些学生对一些公式、定义、定律说得头头是道,但一旦遇到问题就束手无策了,这种情况的原因往往是缺乏练习的结果.这时学生所掌握的概念和规则主要以一种静态的方式存储,要使这种静态的“陈述性知识”转化为动态的“技能”,则需要通过适当的变式练习来完成,将命题网络方式存储的知识转化为以“产生式”为表征的程序性知识.

解答物理练习的最初阶段,适宜选择与原先学习情景相似的问题情景进行练习,随着知识逐渐稳定和巩固,问题类型要有变化,可以逐渐演变为与原先学习情景完全不同的新情景,以促进学生习得的概念和规则的纵向迁移.

利用F=ma求解实际问题,如果没有真正理解其物理思想和方法,当遇到新的物理情景时,就觉得“无从下手”或者“丢三纳四”.怎样才能让学生不是机械化的模仿和简单记住解题步骤,而是真正做到“知其然,还知其所以然”呢?通过变式练习可以达到这样的目的.应用F=ma求解的变式练习如下:

例题 通过“汽车刹车”问题,初步体会F=ma中的F是合力,以及定律的矢量性.并提炼“已知力求运动”的解题思路.(图4)

变式1 “吊车对缆绳的拉力要求”,将水平运动变为竖直运动,将一个力变为两个力.并提炼“已知运动求力”的解题思路.(图5)

变式2 设计“加速度计”的原理图,进一步将两力共线变为不共线求合力.提高解题的难度.(图6)

通过教师提供适当的变式练习,让学生熟知规则适用的各种不同情景,并能在情景中,通过新旧知识的融会贯通,由浅入深、循序渐进地分析问题,并且通过串接和回顾,将产生式的条件与问题解决相联系.这样,不仅可以丰富学生的认知结构,还可以培养学生分析能力和正确寻找解题思路的能力,才真正有可能在以后碰到不同的情景时,一旦识别了产生式中的条件,就有可能迅速地作出相应的行动反应,从而正确解决所面临的问题,实现触类旁通.

由此可见,教师只有在教学中精心设计,才有可能避免将程序性知识当作陈述性知识来教,满足于单纯的记忆要求,也才有可能避免大量的重复练习.科学探究和变式练习有效地促进了学生程序性知识的学习,提高学生解决问题的能力,培养学生创新意识和创新能力,将知识学习与能力培养紧密、和谐地结合起来.

篇5:程序员面试基础知识

要点:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了以下功能:在运行时判定任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判定任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

问题:Java为什么要引入异常处理机制

要点:

程序执行时经常会出现除零溢出、数组越界等运行错误,影响程序的正常执行。错误及异常是不可避免的,一个好的应用程序,在满足用户要求的各种功能的同时,还应具备能预见程序执行过程中可能产生的各种异常的能力,并能为异常情况给予恰当处理。在Java语言中,这种技术就是异常处理 Java语言通过面向对象的异常处理机制来解决运行期间的错误,可以预防错误的程序代码或系统错误所造成的不可预期的结果发生。减少编程人员的工作,增加了程序的灵活性,增加程序的可读性和健壮性.问题:什么是JAVA多线程机制

一.什么是多线程?

多线程是指同时存在几个执行体,按照不同的执行线索共同工作的情况。

二.什么是程序,进程和线程?

程序是一段静态的代码,是应用软件执行的蓝本。

进程是程序的一次动态执行过程,它对应了从代码加载,执行至执行完毕的一个完整的过程。这个过程也是进程本身从生产,发展至消亡的过程。

线程是比进程更小的执行单位。

区别:一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索即每个线程也有其从生产,发展到消亡的过程。

三.线程的生命周期

线程的生命周期可分为四个阶段,新建,运行,中断和死亡。

新建:当一个Thread类或者其子类的对象被声明并创建时,新生成的线程就处于新建装他,有了相应的内存空间和其他资源。

运行:线程被创建之后,就有了运行的条件了,一旦轮到它来享用CPU资源时,便可以摆脱创建它的主进程开始了自己的生命周期。

中断:一个正在执行的线程可能被认为的中断,让出CPU使用权,进入阻塞状态。线程阻塞时,不能进入排队队列,只有当引起阻塞的原因被撤销时,线程才可转入就绪状态,重新进入排队队列中,等待CPU资源,以便从中止处开始运行。

死亡:线程死亡有2种情况,一是正常运行,完成了它全部的工作。另一种是线程被提前强制终止。死亡状态下的线程,释放了被分配的内存。

四.线程的优先级

在java系统中,线程调度依据优先级基础上的“先到先服务”原则。

Thread类的setPriority(int a)方法可设置线程的优先级,取值有Thread.MIN_PRIORITY,Thread.MAX_PRIORITY, Thread.NORM_PRIORITY三种,默认级别为Thread.NORM_PRIORITY.五.如何实现多线程

Java编程中实现多线程有两种方式:一是继承Thread类,用其子类创建线程,二是实现Runnable接口

六.线程同步

当两个或者多个线程同时访问一个变量,并且一个线程需要改变某个变量时,需要对修改数据的方法修饰为synchronized.当一个线程在使用同步方法时需要用到某个变量,而此变量又需要其他线程修改后才能符合本线程需要,此时用wait(),让本线程等待。

其他线程如果在使用同步方法时不需要等待,那么当它使用完该方法后,用notifyAll()方法通知所有由于使用该同步方法而处于等待的线程结束等待,(notify()方法只能通知第一个处于等待的线程结束等待)

七.Interrupt()方法

一个线程在run方法执行完后便会自动消灭,如果想在run方法执完毕前就消灭线程,可以使用interrupt()方法,此时该线程会捕获InterruptedException异常,在处理该异常的语句里告诉线程立刻结束run方法的执行。

问题:java多线程使用cup是什么机制

要点:java获得cup使用权根据优先级,高优先的先执行,这个和操作系统是一样的,但是优先级别的控制是通过虚拟机控制的,然后在执行的时候是通过操作系统时间片的机制,多线程java有自己的调度算法,虚拟机会自动调度执行的线程,而操作系统处理的是cpu的执行,其实两者都有调度算法,xp的机制我想和

1、main方法是怎么写的public static void main(String [] args){}

2、变量的命名规则是怎么样的?

采用驼峰命名法,见名知意,以小写字母开始。

常量命名:全部大写。

方法命名: 小写字母开始,驼峰命名。

类命名:首字母大写。

3、if„else„和写两个if 有什么区别

if„else„只执行其中一条,写两个if,两个都要执行

4、在JAVA中直接写浮点常数,默认是什么类型?

默认是double类型

5、什么是标识符?它的命名规则是什么?

凡是可以命名的地方都叫标识符。

标识符有两种:

1、系统标识符(关键字);

2、用户标识符

以字母、数字、下划线、$复活组成,不能以数字开头

6、什么是变量?

变量是命了名的内存空间,并且空间的值是可以改变的。

7、JDK与JRE分别是什么?

JDK叫java开发工具集,包括编译环境、运行环境、调试环境以及基础类库。

JRE叫java运行环境,包括虚拟机、核心类库、以及健接文件。

8、try-catch-finally三个基本块的作用?catch里的代码是干什么的?

try块表示此处代码可能引发异常

catch块捕获try块的异常

finally块通常用于资源的回收,连接关闭,清理工作等

try-catch-finally不能单独存在,try块后必须跟catch或finally

catch或finally前必须跟try块

9、继承类和实现接口分别怎么做?

继承用extends关键字继承

定义接口用interface关键字

实现接口用implements10、如何去获得字符串的长度?

调用String类的length()方法

11、Java的基本数据类型有哪些?

int 4字节 整型

byte 1字节 整型

char 2字节 整型

short 4字节 整型

long 8字节 整型

double 8字节 浮点

float 4字节 浮点

boolean 布尔

12、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

值传递,Java里没有引用传递

13、列出至少5个最常见到的runtime exception并描述在什么情况下出现

IOException在未找到文件时会抛出

NullPointerExecption在对象引用指向空时会抛出

ArrayIndexOutOfBoundsExecption在数组下标越界时会抛出

NumberFormatException在字符串不能转换成数字时会抛出

ArithmeticException在分母为零时会抛出

14、ArrayList和Vector的区别

vector是线程安全的,所以效率低,Arraylist是线程不安全的,但是效率高。

15、在IO中字节流和字符流的父类是什么?

字节流父类是InputStrean和OutputStream

字符流父类是Reader和Writer16、什么是包?定义包有什么好处?

文件夹。

好处:

1、可以有效的组织相关类;

2、可以做到信息的隐藏。

17、怎么样知道磁盘一个目录中有哪些文件?

1、File对象.list()方法;

2、File对象.listFile()方法。

18、如何获得一定范围的随机整数?

x+Math.random()*y 其中x是位移数,确定最小范围,y是放大系数,确定最大数。

(x-y)*Math.randon()+y19、如何获得java当前的工作目录

使用System.getProperty(“user.dir”)能够获得当前工作目录的字符串地址。

20、怎么样判断一个异常类是checked异常还是unchecked异常?

判断当前异常类,是否是RuntimeException的子类,如果是,则是运行期异常否则是编译期异常。

21、log4j一共有几个级别?分别是哪些?级别的高低有什么样的区别.log4j有五个级别:

DEBUG:调试

INFO:信息

WARN:警告

ERROR:错误

FATAL:崩溃

21、静态变量和成员变量应该怎么访问?

静态变量可以通过对象.和类名.的方式访问

成员变量通过对象.的方式访问

22、如何将一个字符串转成一个基本数据类型

Int x = Integer.parselint(“32”);

Double d = Double.parseDouble(“4.5”);

23、如何让JFrame的初始位置居中(在不同的分辨率中)

窗体对象.setLocationRelativeTo(null);

24、谈谈集合的作用

方便对数据进行 存储,检索,操作,传输。

25、类的修饰符能不能是private、static、protected?

内部类可以,因为内部类相当于外部类的属性

26、Try块中是否所有的语句都一定会执行,为什么?

不是,一但try中发生了异常,那么异常发生处下面的语句就不会执行,专区catch块执行

27、什么时候用继承,什么时候用接口?

当需要重用属性和方法时使用继承

当只需要重用方法时用接口

28、finally是不是什么时候都会执行?

是当虚拟机关闭,System.exit(0),finally内容不会执行;

29、什么是主线程?

当main()方法执行时会产生主线程,1最先开始 2最后结束

3产生其他子线程

4回收资源

30、进行IO流操作时,如果操作的文件不存在会发生什么情况?

读取流在文件不存在时,会抛出文件未找到异常

写入流在文件不存在时,会创建文件,但如果该文件所在目录不存在,同时会抛出文件未找到异常

31、IO流操作的步骤是怎么样的?

创建流 操作流 关闭流

32、finally的作用是什么?

无论是否有异常都会执行的代码块,一般用于资源回收,比如流动关闭、数据库的关闭

34、当一个线程进入一个对象的一个同步方法后,能否进入其它非同步方法? 么?一般在什么时候使用? 可以,但不能进入其他同步方法。

33、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行,什么时候被执行?

Finally{}在程序开启时只执行它本身里的代码。

会执行,在方法返回前执行

35、如何启动线程,它直接调用run()方法有什么区别?

启动线程调用start方法,用start方法启动线程后,是多个线程同时进行,使用run()是普通方法,是不会产生新的线程,是单线程。

36、数组有没有length()这个方法? String有没有length()这个方法?

数组有length属性,String有length方法

37、GC是什么? 为什么要有GC?

GC叫做垃圾回收器,为了回收内存不再使用对象,释放内存空间,避免内存溢出。

38、线程同步化会带什么样的结果?

1:可以使数据安全

2:效率会降低

39、什么是线程安全?

当两个或两个以上线程,访问同一个资源时,为了保证数据的安全,只允许同一时间

只能有一个线程访问该资源。

40、服务器类有一个while循环,能否直接while(true)?

可以,但这样缺乏灵活性,没有办法控制循环结束,最好使用boolean变量来控制

循环的运行和结束。

41、java帮助文档是如何生成的?

Javadoc.exe42、什么时候类名和文件名必须一致?

当类的定义为Public时,类名必须与文件名保存一致

43、如何将实现包装类和基本数据类型转化?

包装转基本1:包装类对象.xxxvalue(值);2直接赋值

基本转包装1: Integer = new Integer(90);2直接赋值

44、类InputStream中方法read()的返回值是什么?读出的是什么?

Read()返回的是int,读取的数据

read(byte[])返回int 当前读取的字节数

45、如果一个类实现一个接口,可不可以不实现接口里定义的所有方法?

可以,但这个类只能是抽象类

46、构造方法和方法有什么区别?构造方法能不能被重载,能不能被重写?

构造方法和雷鸣相同,构造方法没有返回类型,在对象创建时,被调用。

构造方法可以重载,不能重写。

47、请列举switch()括号中能接受的所有数据类型。

Char byte short int48、GUI的布局管理器常见的有哪几种?

绝对布局

边界布局管理器

卡片布局管理器

流布局管理器

网格布局管理器

49、断言有什么作用?

断言是一个布尔表达式,当表达式为真继续执行,表达式为假,则抛出一个断言错误,主要用于测试。

50、String和StringBuffer的区别?

String具有长度不可变的特性,当String做添加、删除修改时,会产生一个新对象

StringBuffer是String类的一个改进版,是缓冲区的一个对象,当对该对象进行字符的添加、修改时,不会产生新对象。

51、接口里方法修符是什么?

Public abstract52、接口里可以定义变量吗?

不行,就可中的变量修饰符是public static final 只能定义常量

53、说几个String常用的方法

String.length()split()substring()equals()indexOf()lastundexOf()

54、在Dos界面下如何编译并执行Java程序?

Javac 文件名

Java 类名

55、创建一个线程有几种方法?

集成 thread 类

实现Runnable接口

56、项目开发的流程是怎么样的?

市场调研,需求分析,概要设计,详细设计,编码,测试,维护。

57、java语言的特点是什么?

简单,面向对象,分布式,健壮,可移植,解释性,安全,多线程,垃圾回收

58、main方法中有个参数String[] args。这个参数的值是由谁传递给它的。执行java类时,由控制台传入

59、java中采用什么字符编码集?char类型能不能放入一个中文字? Unicode 该字符集一个字符有2个字节。,char是两个字节可以放一个中文,因为中文是两个字节

60、byte的取值范围

-128~+127(-2的7次方to2的7次方-1)

61、GET方式和POST方式提交时,流有什么不同?

GET和POST是HTTP协议请求服务器的两种方式

GET方式页面参数,是附加在URL后面。/login?userName=XXX

篇6:程序员面试题

2:如果一个对象==另一个对象,那么他们的hashcode一定相同

3:instanceof运算符可以用来决定某对象的类是否实现了某个接口

4:Spring/webwork/Hibernate是几个实现MVC的框架

5:运行在一台主机上的服务器进程,其端口号不能重复

6:属于unix主机系统的可热插拔硬盘,在取出硬盘前,必须先将该硬盘的文件系统拆卸unmound下来.

7:HTML是XML

8:Jsp不是servlet

9:数据库触发器的编译代码不在数据库中存储,所以多次触发触发器时,数据库管理系统都

将对触发器进行编译,然后执行它.

10:事务transctions是数据库管理系统进行并发控制的最小单位.

更多与计算机专业相关的面试试题分享,大家可继续阅读:

1、C语言笔试题目及答案

2、网管系统维护工程师面试题

上一篇:宝鸡市城建局第十五个法制宣传月活动工作总结下一篇:生活大爆炸第十季剧本