资讯详情

复试面试问题

1.面向对象是基于面向过程的编程理念。

面向过程:强调每个功能的步骤。面向对象:强调对象,然后对象调用功能。

2.成员变量和局部变量的区别?

A:类别中的位置不同: 成员变量在类中的方法,局部变量在方法定义或方法声明中。

B:不同的内存位置:成员变量堆内存,局部变量堆内存。

C:不同的生命周期:成员变量随着对象的创建和消失而存在。局部变量随着方法的呼叫而存在,并随着方法的呼叫而消失。

D:初始化值不同:成员变量有默认初始化值,局部变量没有默认初始化值,必须在使用前定义、赋值。

3.Java和C 的区别:

  1. Java它是一种纯面向对象的语言,必须在类中定义所有代码(包括函数和变量)。C 中还有面向过程的东西,比如是全局变量和全局函数。

  2. C 中有指针,Java没有,但有引用。

  3. Java 不支持多重继承,只能通过多个接口达到相同的目的 C 支持多重继承。

C 支持强制自动转型,Java中不行,就会出现ClassCastException(类型不匹配)。

Java 支持自动垃圾回收, C 需要手动回收。

Java 不支持操作符重载, C 可以。

Java 的 goto 是保留字,但不能用,C 可以使用 goto。

Java 不支持条件编译,C 通过 #ifdef #ifndef 等待预处理命令,实现条件编译。

  1. “JVM是虚拟机 Java Virtual Machine的英文简称。它是java运行环境的一部分是通过模拟实际计算机上的各种计算机功能来实现的虚构计算机。

5.Abstract不能和private,final,static共存

6.抽象与接口的区别:

A:成员区别:

抽象类:

成员变量:可变量,也可常量。

结构方法:是的

成员方法:抽象或非抽象。

接口:

成员变量:只能是常量 成员方法:只能抽象

B:关系区别:

类与类:继承关系,只能单独继承,可多层继承。

类与接口:实现关系,可以单独实现,也可以多实现。并且可以在继承一个类的同时实现多个接口。

接口与接口:继承关系,可单继承,也可多继承。

C:设计理念的差异:

抽象:继承体现在:is a 抽象类定义了继承系统的共同功能。

接口:实现:like a 接口定义了继承系统的扩展功能。

7.Package,import,class顺序关系,package>import>class

Package只有一个,import可以有多个,class可以有很多,只有一个建议。

8.String,StringBuffer,StringBuilder的区别?String内容不可变,而且StringBuffer,StringBuilder内容可变。 StringBuffer同步,数据安全,效率低,StringBuilder不同步,数据不安全,效率高。

9.OSI7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;

10.无线传感器网络主要由节点、传感器网络和用户三部分组成

11.Java语言是跨平台的。JDK开发环境(大)JRE又是运行环境(中)JVM保证跨平台(小)。

13.命名规则:

包:文件夹,区分同一类名,全部小写。

类别或界面:一个单词:单词的首字母必须大写。多个单词:每个单词的首字母必须大写。

方法或者变量:一个单词:单词的首字母小写。多个:从第二个单词开始首字母大写。

常量:一个单词:全部大写。多个:每个字母都应该大写_隔开。

14.Char单引号字符。String双引号字符串。

15.&&和||前一个真(假)不判断后一个,&和|还判断。

16.Break用来从switch跳出句子或循环句子。Continue跳过循环体的剩余句子,开始执行下一个循环。Return结束方法。

权限 
  修饰符 

同一个类

同一包的子类或无关类

不同的包或同一包子类

不同的包没关系(全局)

Private

Default

Protected

public

19.修饰符包括:

权限修饰符:private,默认的,public,protected。

状态修饰符:static,final。

抽象:abstract。

类:

权限修饰符:private,默认的。

状态修饰符:final。

抽象:abstract。

多用:public

成员变量:

权限修饰符:private,默认的,public,protected。

状态修饰符:static,final。

抽象:无。

多用:private

构造方法:

权限修饰符:private,默认的,public,protected。

状态修饰符:无。

抽象:无。

多用:public

成员方法

权限修饰符:private,默认的,public,protected。

状态修饰符:static,final。

抽象:abstract。

多用:public

除此以外的构造组合

成员变量:public static final

成员方法:public static;public abstract;public final;

20.算法与程序的区别:算法是一个问题或一类问题的解决方案和具体步骤,是对问题解决过程的准确、完整的逻辑描述。程序是一系列指令的集合,用计算机解决问题或控制一个过程。程序不等于算法。然而,算法可以通过程序设计实现。

  1. 方法重写:子类中的方法与父类中的方法完全相同。

方法重载: 该类中出现的方法名相同,参数列表不同。与返回值无关。

方法重写的应用:当子类需要父类的功能,而功能主体子类有自己独特的内容时,可以重写父类的方法。即遵循父类的功能,定义子类的独特内容。

  1. 继承中构造方法的关系

A:默认情况下,子类中的所有结构方法都将访问父类中空参数的结构方法

B:因为子类会继承父类的数据,也可以使用父类的数据。因此,在子类初始化之前,必须完成父类数据的初始化。

23.this(…)或者super(…)第一句必须出现。

  1. A:静态代码块、构造代码块、构造方法的执行过程

静态代码块 > 构造代码块 > 构造方法

B:静态内容随类加载而加载,静态代码块内容优先

C:父类的初始化将在子类初始化之前进行

  1. this代表本类对应的引用。 super代表父类存储空间的标志(可理解为父类引用,可操作父类成员)

代码块:在Java使用{}包含的代码。局部代码块可分为局部代码块:局部位置,用于限制变量的生命周期。

构造代码块:在类别中的成员位置,使用{}包含的代码。构造代码块将在每次调用构造方法之前执行。功能:将多种构造方法中的共同代码放在一起,初始化对象。

静态代码块:在类中的成员位置,使用{}包含的代码,但它使用satic修饰了。作用:一般是对类进行初始化。

静态代码块:只执行一次.构造代码块:每次调用构造方法都执行

  1. 抽象类的特点:

A:抽象类和抽象方法必须用abstract关键字修饰

B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类

C:抽象类不能实例化

D:抽象的子类

a:如果不想重写抽象方法,该子类是一个抽象类。

b:重写所有的抽象方法,这个时候子类是一个具体的类。

抽象类的实例化其实是靠具体的子类实现的。是多态的方式。

Animal a = new Cat();

  1. 多态中的成员访问特点:

A:成员变量  编译看左边,运行看左边。

B:构造方法 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。

C:成员方法 编译看左边,运行看右边。

D:静态方法 编译看左边,运行看左边。

final 特点:可以修饰类,该类不能被继承。可以修饰方法,该方法不能被重写。可以修饰变量,该变量不能被重新赋值。因为这个变量其实常量。

  1. final修饰局部变量的问题

基本类型:基本类型的值不能发生改变。

引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。

  1. 内部的访问特点:

A:内部类可以直接访问外部类的成员,包括私有。

B:外部类要访问内部类的成员,必须创建对象。

  • A:main方法 * main+alt+/ 回车即可

* B:输出语句 * syso+alt+/

* 1:格式化  ctrl+shift+f

* 2:导入包  ctrl+shift+o

单行:注释 ctrl+/,取消注释再来一次。 多行:ctrl+shift+/,ctrl+shift+\

* 4:代码上下移动

  • 选中代码alt+上/下箭头

* 5:查看源码 *   选中类名(F3或者Ctrl+鼠标点击)

  1. Integer类下的一个静态方法:

*     public static String toHexString(int i):把一个整数转成一个十六进制表示的字符串

34.字符串是常量,一旦被赋值,就不能被改变。

  1. ==:比较引用类型比较的是地址值是否相同

equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同。

  1. String类的判断功能:

boolean equals(Object obj):比较字符串的内容是否相同,区分大小写

boolean equalsIgnoreCase(String str):比较字符串内容是否相同忽略大小写

boolean contains(String str):判断大字符串中是否包含小字符串

boolean startsWith(String str):判断字符串是否以某个指定的字符串开头

boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾

boolean isEmpty():判断字符串是否为空。

注意:字符串内容为空和字符串对象为空。String s = “”;String s = null;

  1. String类的获取功能

int length():获取字符串的长度。

char charAt(int index):获取指定索引位置的字符

int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。

int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。

int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。

int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。

String substring(int start):从指定位置开始截取字符串,默认到末尾。

String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。

  1. String的转换功能:

byte[] getBytes():把字符串转换为字节数组。

char[] toCharArray():把字符串转换为字符数组。

static String valueOf(char[] chs):把字符数组转成字符串。

static String valueOf(int i):把int类型的数据转成字符串。

注意:String类的valueOf方法可以把任意类型的数据转成字符串。

String toLowerCase():把字符串转成小写。

String toUpperCase():把字符串转成大写。

String concat(String str):把字符串拼接。

String类替换功能:String replace(char old,char new)

String replace(String old,String new)

去除字符串两空格  String trim()

按字典顺序比较两个字符串

int compareTo(String str)  int compareToIgnoreCase(String str)

  1. Arrays:针对数组进行操作的工具类。比如说排序和查找。

1:public static String toString(int[] a) 把数组转成字符串

2:public static void sort(int[] a) 对数组进行排序

3:public static int binarySearch(int[] a,int key) 二分查找

  1. public static boolean isUpperCase(char ch):判断给定字符是否大写

public static boolean isLowerCase(char ch):判断给定字符是否是小写字符

public static boolean isDigit(char ch):判断给定的字符是否是数字字符

public static char toUpperCase(char ch):把给定的字符转换为大写字符

public static char toLowerCase(char ch):把给定的字符转换为小写字符

42.  为了对基本数据类型进行更多的操作,更方便的操作,Java就针对每一种基本数据类型提供了对应的类类型。包装类类型。(用于基本数据类型与字符串之间的转换。)

Byte>Byte  Short>Short  int>Integer  long>Long  float>Float

double>Double  char>Character  boolean>Boolean

  1. int类型和String类型的相互转换

int – String

String.valueOf(number)

String – int

Integer.parseInt(s)

常用的基本进制转换

public static String toBinaryString(int i)

public static String toOctalString(int i)

public static String toHexString(int i)

十进制到其他进制

public static String toString(int i,int radix)

其他进制到十进制

public static int parseInt(String s,int radix)

Integer的数据直接赋值,,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间(Integer i7 = 127;)

StringBuffer和String的区别?

前者长度和内容可变,后者不可变。使用前者做字符串拼接,不会浪费太多资源。

StringBuffer的构造方法:

public StringBuffer():无参构造方法

public StringBuffer(int capacity):指定容量的字符串缓冲区对象

public StringBuffer(String str):指定字符串内容的字符串缓冲区对象

StringBuffer的方法:

public int capacity():返回当前容量。  理论值

public int length():返回长度(字符数)。 实际值

  1. StringBuffer的添加功能:

public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身

public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

StringBuffer的删除功能

public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身

public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身

StringBuffer的反转功能: public StringBuffer reverse()

StringBuffer的替换功能:

public StringBuffer replace(int start,int end,String str):从start开始到end用str替换

StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了

public String substring(int start)

public String substring(int start,int end)

  1. BigDecimal类:不可变的任意精度的有符号十进制数,解决数据丢失问题。

功能:

public BigDecimal add(BigDecimal augend)

public BigDecimal subtract(BigDecimal subtrahend)

public BigDecimal multiply(BigDecimal multiplicand)

public BigDecimal divide(BigDecimal divisor)

public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode): 商,几位小数,如何舍取

  1. BigInteger:可以让超过Integer范围内的数据进行运算

功能:

public BigInteger add(BigInteger val):加

public BigInteger subtract(BigInteger val):减

public BigInteger multiply(BigInteger val):乘

public BigInteger divide(BigInteger val):除

public BigInteger[] divideAndRemainder(BigInteger val):商和余数的数组

  1. Calendar:它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

public int get(int field):返回给定日历字段的值。日历类中的每个日历字段都是静态的成员变量,并且是int类型。

  1. public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作。

public final void set(int year,int month,int date):设置当前年月日

  1. Date:表示特定的瞬间,精确到毫秒。

构造方法:

Date():根据当前的默认毫秒值创建日期对象

Date(long date):根据给定的毫秒值创建日期对象

格式:Sat Mar 14 08:56:41 CST 2020

public long getTime():获取时间,以毫秒为单位(currentTimeMillis())

public void setTime(long time):设置时间

  1. Date   – String(格式化)   public final String format(Date date)

String – Date(解析)       public Date parse(String source)

DateForamt:可以进行日期和字符串的格式化和解析,但是由于是抽象类,所以使用具体子类SimpleDateFormat。

SimpleDateFormat的构造方法:

SimpleDateFormat():默认模式

SimpleDateFormat(String pattern):给定的模式

年 y  月 M   日 d  时 H  分 m  秒 s    2014年12月12日 12:12:12

  1. Math:用于数学运算的类。

成员变量:

public static final double PI      public static final double E

成员方法:

public static int abs(int a):绝对值

public static double ceil(double a):向上取整

public static double floor(double a):向下取整

public static int max(int a,int b):最大值 (min自学)

public static double pow(double a,double b):a的b次幂

public static double random():随机数 [0.0,1.0)

public static int round(float a) 四舍五入(参数为double的自学)

public static double sqrt(double a):正平方根

  1. Random:产生随机数的类

构造方法:

public Random():默认种子,是当前时间的毫秒值

public Random(long seed):给出指定的种子,每次得到的随机数是相同的。

成员方法:

public int nextInt():返回的是int范围内的随机数

public int nextInt(int n):返回的是[0,n)范围的内随机数

  1. 正则表达式:符合一定规则的字符串。结合下面的功能使用

判断功能 String类的public boolean matches(String regex)

59.正则表达式格式:

模式

描述

^

匹配字符串的开头

$

匹配字符串的末尾。

.

匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。

[…]

用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’

[^…]

不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。

re*

匹配0个或多个的表达式。

re+

匹配1个或多个的表达式。

re?

匹配0个或1个由前面的正则表达式定义的片段非贪婪方式

re{ n}

匹配n个前面表达式。例如,"o{2}“不能匹配"Bob"中的"o”,但是能匹配"food"中的两个o。

re{ n,}

精确匹配n个前面表达式。例如,"o{2,}“不能匹配"Bob"中的"o”,但能匹配"foooood"中的所有o。"o{1,}“等价于"o+”。"o{0,}“则等价于"o*”。

re{n, m}

匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式

a| b

匹配a或b

(re)

匹配括号内的表达式,也表示一个组

\w

匹配数字字母下划线

\W

匹配非数字字母下划线

\s

匹配任意空白字符,等价于 [\t\n\r\f]。

\S

匹配任意非空字符

\d

匹配任意数字,等价于 [0-9]。

\D

匹配任意非数字

\A

匹配字符串开始

\Z

匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。

\z

匹配字符串结束

\G

匹配最后匹配完成的位置。

\b

匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。

\B

匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。

\n,\t

匹配一个换行符。匹配一个制表符, 等

分割功能: String类的public String[] split(String regex)

根据给定正则表达式的匹配拆分此字符串。

  1. 硬盘上的路径,我们应该用\替代\

  2. 替换功能: String类的public String replaceAll(String regex,String replacement)      使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

  3. 把规则编译成模式对象       Pattern p = Pattern.compile(regex);

通过模式对象得到匹配器对象      Matcher m = p.matcher(s);

调用匹配器对象的功能     // 通过find方法就是查找有没有满足条件的子串

注意:一定要先find(),然后才能group()

System类包含一些有用的类字段和方法。它不能被实例化。

方法:

public static void gc():运行垃圾回收器。

public static void exit(int status):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。

public static long currentTimeMillis():返回以毫秒为单位的当前时间

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)           从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

65.Collection类

boolean addAll(Collection c):添加一个集合的元素

boolean removeAll(Collection c):移除一个集合的元素(只要有一个元素被移除了,就返回true。)

boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(只有包含所有的元素,才叫包含)

boolean retainAll(Collection c): A对B做交集,最终的结果保存在A中,B不变。返回值表示的是A是否发生过改变。

  1. 集合的遍历。其实就是依次获取集合中的每一个元素。

Object[] toArray():把集合转成数组,可以实现集合的遍历

java中length,length(),size()区别

java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.

java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.

java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!

  1. 数组和集合的区别?

A:长度区别

数组的长度固定           集合长度可变

B:内容不同

数组存储的是同一种类型的元素 而集合可以存储不同类型的元素

C:元素的数据类型问题

数组可以存储基本数据类型,也可以存储引用数据类型

集合只能存储引用类型

  1. Collection:是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的。

Collection的功能概述:

1:添加功能

boolean add(Object obj):添加一个元素

boolean addAll(Collection c):添加一个集合的元素

2:删除功能

void clear():移除所有元素

boolean remove(Object o):移除一个元素(只有一個移除就true)

boolean removeAll(Collection c):移除一个集合的元素(所有)

3:判断功能

boolean contains(Object o):判断集合中是否包含指定的元素

boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(所有)

boolean isEmpty():判断集合是否为空

4:获取功能

Iterator iterator()(重点)

5:长度功能

int size():元素的个数

6:交集功能

boolean retainAll(Collection c):A对B做交集,最终的结果存在A中,B不变,返回值表示的是A是否发生过变化。

7:把集合转换为数组        Object[] toArray()

// 创建集合对象

// Collection c = new Collection(); //错误,因为接口不能实例化

Collection c = new ArrayList();

Iterator iterator():迭代器,集合的专用遍历方式

Object next():获取元素,并移动到下一个位置。

NoSuchElementException:没有这样的元素,因为你已经找到最后了。

boolean hasNext():如果仍有元素可以迭代,则返回 true。

List集合的特点: 有序(存储和取出的元素一致),可重复的。

List集合的特有功能:

A:添加功能

void add(int index,Object element):在指定位置添加元素

B:获取功能

Object get(int index):获取指定位置的元素

C:列表迭代器

ListIterator listIterator():List集合特有的迭代器

D:删除功能

Object remove(int index):根据索引删除元素,返回被删除的元素

E:修改功能

Object set(int index,Object element):根据索引修改元素,返回被修饰的元素

F:查找功能:

Int indexOf(Object o);

Int lastIndexOf(Object o);

G:子list的截取:

List subList(int from,int to);

72.  List集合的特有遍历功能:size()和get()方法结合使用

ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

产生的原因:

迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。

其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。

如何解决呢?

A:迭代器迭代元素,迭代器修改元素

元素是跟在刚才迭代的元素后面的。

B:集合遍历元素,集合修改元素(普通for)

元素在最后添加的。

列表迭代器:

ListIterator listIterator():List集合特有的迭代器,该迭代器继承了Iterator迭代器,可以直接使用hasNext()和next()方法。

  1. 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。

格式:

<数据类型>

此处的数据类型只能是引用类型。

好处:

A:把运行时期的问题提前到了编译期间

B:避免了强制类型转换

C:优化了程序设计,解决了黄色警告线

  1. 泛型高级(通配符)

?:任意类型,如果没有明确,那么就是Object以及任意的Java类了

? extends E:向下限定,E及其子类

? super E:向上限定,E极其父类

JDK5的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举

增强for:是for循环的一种。

格式:

for(元素数据类型 变量 : 数组或者Collection集合) {

使用变量即可,该变量就是元素

}

好处:简化了数组和集合的遍历。

弊端: 增强for的目标不能为null。

如何解决呢?对增强for的目标先进行不为null的判断,然后在使用。

  1. 可变参数:定义方法的时候不知道该定义多少个参数

格式:

修饰符 返回值类型 方法名(数据类型…  变量名){

}

注意:

这里的变量其实是一个数组

如果一个方法有可变参数,并且有多个参数,可变参数是最后一个

List的子类特点:

ArrayList:

底层数据结构是数组,查询快,增删慢

线程不安全,效率高

Vector:

底层数据结构是数组,查询快,增删慢

线程安全,效率低

LinkedList:

底层数据结构是链表,查询慢,增删快

线程不安全,效率高

  1. Vector的特有功能:

1:添加功能

public void addElement(Object obj)     –  add()

2:获取功能

public Object elementAt(int index)     –  get()

public Enumeration elements()          –  Iterator iterator()

boolean hasMoreElements()              hasNext()

Object nextElement()               next()

  1. LinkedList的特有功能:

A:添加功能

public void addFirst(Object e)

public void addLast(Object e)

B:获取功能

public Object getFirst()

public Obejct getLast()

C:删除功能

public Object removeFirst()

public Object removeLast()

  1. -List  有序(存储顺序和取出顺序一致),可重复

-Set   无序(存储顺序和取出顺序不一致),唯一

HashSet:它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。

HashSet集合存储自定义对象并遍历。对象的成员变量值相同为同一个对象

注意:

你使用的是HashSet集合,这个集合的底层是哈希表结构。

而哈希表结构底层依赖:hashCode()和equals()方法。

如果认为对象的成员变量值相同为同一个对象的话,就应该重写这两个方法。

  1. LinkedHashSet:底层数据结构由哈希表和链表组成。 哈希表保证元素的唯一性。 链表保证元素有素。(存储和取出是一致)

TreeSet存储自定义对象并保证排序和唯一。

  1. Collection和Collections的区别?

Collection:是单列集合的顶层接口,有子接口List和Set。

Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法

Collections的方法

public static void sort(List list):排序 默认情况下是自然顺序。

public static int binarySearch(List<?> list,T key):二分查找

public static T max(Collection<?> coll):最大值

public static void reverse(List<?> list):反转

public static void shuffle(List<?> list):随机置换

88.  Map集合的遍历。A:获取所有键值对对象的集合B:遍历键值对对象的集合,得到每一个键值对对象     C:根据键值对对象获取键和值

Set<Map.Entry<K,V>> entrySet():返回的是键值对对象的集合

Map集合的特点:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

Map集合和Collection集合的区别?

Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。

Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。

注意:

Map集合的数据结构值针对键有效,跟值无关

Collection集合的数据结构是针对元素有效

90.  Map集合的功能概述:

1:添加功能

V put(K key,V value):添加元素。

如果键是第一次存储,就直接存储元素,返回null

如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

2:删除功能

void clear():移除所有的键值对元素

V remove(Object key):根据键删除键值对元素,并把值返回

3:判断功能

boolean containsKey(Object key):判断集合是否包含指定的键

boolean containsValue(Object value):判断集合是否包含指定的值

boolean isEmpty():判断集合是否为空

4:获取功能

Set<Map.Entry<K,V>> entrySet():???

V get(Object key):根据键获取值

Set keySet():获取集合中所有键的集合

Collection values():获取集合中所有值的集合

5:长度功能

int size():返回集合中的键值对的对数

Hashtable和HashMap的区别?

Hashtable:线程安全,效率低。不允许null键和null值

HashMap:线程不安全,效率高。允许null键和null值

List,Set,Map等接口是否都继承子Map接口?

List,Set不是继承自Map接口,它们继承自Collection接口

Map接口本身就是一个顶层接口

92.异常:

ArithmeticExcetion:整数的除0操作将导致该异常的发生。

NullPointerException:当对象没有实例化时,就试图通过该对象的变量访问其数据或者方法。

ArrayIndexOutOfBoundsException:数组越界异常。

IOExcetion:输入/输出时可能产生的各种异常。

SecurityException:一般由浏览器抛出。

93.处理异常的两种方法:

A:try…catch…finally     B:throws 抛出

try…catch…finally的处理格式:

try {

可能出现问题的代码;

}catch(异常名 变量) {

针对问题的处理;

}finally {

释放资源;

}

变形格式:

try {

可能出现问题的代码;

}catch(异常名 变量) {

针对问题的处理;

}

注意: A:try里面的代码越少越好

B:catch里面必须有内容,哪怕是给出一个简单的提示

C:平级关系的异常谁前谁后无所谓,如果出现了子父关系,父必须在后面。

抛出。

格式:

throws 异常类名(注意:这个格式必须跟在方法的括号后面。)

注意:       尽量不要在main方法上抛出异常。

  1. throws和throw的区别(面试题)

throws

用在方法声明后面,跟的是异常类名

可以跟多个异常类名,用逗号隔开

表示抛出异常,由该方法的调用者来处理

throws表示出现异常的一种可能性,并不一定会发生这些异常

throw

用在方法体内,跟的是异常对象名

只能抛出一个异常对象名

表示抛出异常,由方法体内的语句处理

throw则是抛出了异常,执行throw则一定抛出了某种异常

  1. 面试题:

1:final,finally和finalize的区别

final:最终的意思,可以修饰类,成员变量,成员方法

修饰类,类不能被继承 修饰变量,变量是常量  修饰方法,方法不能被重写

finally:是异常处理的一部分,用于释放资源。

一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了

finalize:是Object类的一个方法,用于垃圾回收

2:如果catch里面有return语句,请问finally里面的代码还会执行吗?

会,在return前执行

3:try…catch…finally的格式变形

A:try…catch…finally

B:try…catch

C:try…catch…catch…

D:try…catch…catch…finally

E:try…finally          这种做法的目前是为了释放资源。

  1. 异常注意事项:

A:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。

B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常

C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

97.原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这时用throw

区别:后续程序需要继续运行就try。后续程序不需要继续运行就throw。

98.进制之间的相互转换:

十进制转二进制

方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。

二进制转十进制

方法为:把二进制数按权展开、相加即得十进制数。

二进制转八进制

方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。

八进制转成二进制

方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。

二进制转十六进制

方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。

十六进制转二进制

方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。

十进制转八进制或者十六进制有两种方法

第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。

第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。

八进制或者十六进制转成十进制

方法为:把八进制、十六进制数按权展开、相加即得十进制数。

八进制与十六进制之间的转换有两种方法

第一种:他们之间的转换可以先转成二进制然后再相互转换。

第二种:他们之间的转换可以先转成十进制然后再相互转换。

  1. 数组和链表的特性差异,本质是:连续空间存储和非连续空间存储的差异,主要有下面两点:

ArrayList:底层是Object数组实现的:由于数组的地址是连续的,数组支持O(1)随机访问;数组在初始化时需要指定容量;数组不支持动态扩容,像ArrayList、Vector和Stack使用的时候看似不用考虑容量问题(因为可以一直往里面存放数据);但是它们的底层实际做了扩容;数组扩容代价比较大,需要开辟一个新数组将数据拷贝进去,数组扩容效率低;适合读数据较多的场合

LinkedList:底层使用一个Node数据结构,有前后两个指针,双向链表实现的。相对数组,链表插入效率较高,只需要更改前后两个指针即可;另外链表不存在扩容问题,因为链表不要求存储空间连续,每次插入数据都只是改变last指针;另外,链表所需要的内存比数组要多,因为他要维护前后两个指针;它适合删除,插入较多的场景。另外,LinkedList还实现了Deque接口。

Least Recently Used(LRU)就是当你内存中数据到达指定容量的时候,LRU选择将最长时间没有被使用过的那个键值对从内存中移除。

  1. a = a + b 与 a += b 的区别:+= 隐式的将加操作的结果类型强制转换为持有结果的类型

102.colse()和flush()的区别。

A:close()关闭流对象,但是先刷新一次缓冲区,关闭之后流对象不可以继续在使用了。

B:flush()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。

  1. OSI ( Open System Interconnect ):开放系统互联,是一个七层的计算机网络模型,分别为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

104.TCP/IP(Transmission Control Protool/Internet Protool):传输控制协议/因特网互联协议,是一个四层的计算机网络模型,分别为:数据链路层(网络接口层),网络层,传输层和应用层。结合 OSI 和 TCP/IP 产生了一个五层结构,分别为:物理层、数据链路层、网络层、传输层和应用层。 Internet 就是采用的 TCP/IP 协议。

  1. 集线器工作在 OSI 模型的物理层,网卡工作在 OSI 模型的物理层,交换机工作在数据链路层,路由器工作在网络层。

集线器的英文称为“Hub”。“Hub”是“中心”的意思,集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。

IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。

A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,A类地址的第一位总是O,B类地址的前两位总是10,C类地址的前三位总是110。

子网掩码的作用就是将某个IP地址划分成网络地址和主机地址两部分。

则它的网络号和主机号可按如下方法得到:

① IP地址转换为二进制

② 子网掩码转换为二进制

③ 将两个二进制数逻辑与(AND)运算后得出的结果即为网络部分

④将子网掩码取反再与IP地址逻辑与(AND)后得到的结果即为主机部分

109.TCP与UDP的区别:

TCP提供面向连接的、可靠的数据流传输,而UDP提供的使非面向链接的、不可靠的数据流传输。TCP传输单位称为TCP报文段,UDP传输单位成为用户数据段。TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。

110.网关的作用: 将两个使用不同协议的网络段连接在一起的设备。它的作用就是对两 个网络段中的使用不同传输协议的数据进行互相的翻译转换

ipconfig命令是DOS系统中的命令,可以帮助用户查看网络状况,可以看到你想看到的众多网络信息,比如延迟,IP,主机信息,物理地址信息等等。

  1. 15 、 ICMP 协议?

答: ICMP 是 Internet Control Message Protocol ,因特网控制报文协议。它是 TCP/IP 协议族的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由器是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 ICMP 报文有两种:差错报告报文和询问报文。

  1. TFTP 协议?

答: Trivial File Transfer Protocol 简单文件传输协议,是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。

114.HTTP协议?

答:HTTP超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)是一个属于应用层的面向对象的协议,由于其简捷,快速的方式,适用于分布式超媒体信息系统。

115.DHCP协议?

答:动态主机配置协议,是一种让系统得以链接到网络上,并获取所需要的配置参数手段。

116.IP协议?

答:IP协议是网络层的协议,它是为了实现相互连接的计算机进行通信设计的协议,它实现了自动路由功能,即自动寻径功能。

117.Internet上保留哪些IP地址用于内部?

答:10.0.0.0    172.16.到172.31.     192.168.0.到192.168.255

  1. 运行 net share 返回的结果是什么?

答:列出共享资源相关信息。

  1. net use 和 net user 分别指什么?

答: net user 是对用户进行管理,如添加删除网络使用用户等。

net use 是对网络设备进行管理。

  1. ipconfig/all 用于查看申请的本机 IP 地址

ipconfig/release 用于释放 IP

ipconfig/renew 用于重新向 DHCP 服务器申请 IP 。

  1. ADSL 使用的是频分多路复用技术。

  2. 网桥的作用:网桥是一个局域网与另一个局域网之间建立连接的桥梁。

  3. 防火墙的端口防护是指?

答:指通过对防火墙的端口开关的设置,关闭一些非必需端口,达到一定安全防护目的的行为。

  1. 面向连接和非面向连接的服务的特点是什么?

答:面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。

非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。

  1. 以太网帧的格式

目的地址

源地址

类型

数据

FCS

  1. TCP 的三次握手过程:客户端向服务器端发送连接请求;服务器端对收到的客户端的报文段进行确认;客户端再次对服务器端的确认进行确认。

  2. 网络按地域范围分类?

答:局域网、城域网、广域网。

  1. 网络按使用者分类为:公共网和专用网。

  2. 网络的拓扑结构主要有:星形、总线型、环形以及树型、全连接、不规则网状。

  3. 计算机网络体系结构?

答:实际是分层加每层对应的协议集合。协议包括三个组成部分:

语法:数据与控制信息结构或格式;

语义:需要发出何种控制信息,完成何种动作以及做出何种响应;

时序(同步):事件实现顺序的详细说明。

  1. 双绞线的线对?

答: 1-2 、 7-8 、 3-6 、 4-5

  1. 数据链路层协议可能提供的服务?

答:成帧、链路访问、透明传输、可靠交付、流量控制、差错检测、差错纠正、半双工和全双工。最重要的是帧定界(成帧)、透明传输以及差错检测。

  1. 帧定界?

答:帧定界就是确定帧的界限,其方法有:字节计数法、字符填充法、零比特填充法。

  1. 透明传输?

答:即应能传输任何的数据,在帧定界中用到的标记帧起点和结束的字符也应该能正确的被传输。

  1. 差错检测?

答:循环冗余检验 CRC ,计算出的结果叫做帧检验序列 FCS 。循环冗余检验序列 CRC 差错检测技术只能做到无差错接受,即凡是接收端数据链路层接受的帧,我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错,但是要做到可靠传输(即发送什么就收到什么),也就是说,传输到接收端的帧无差错、无丢失、无重复,同时还按发送的顺序接收,这时就必须再加上确认和重传机制。

  1. 数据链路层互联设备

答:( 1 )网桥:互连两个采用不同数据链路层协议,不同传输介质与不同传输速率的网络,网桥互连的网络在数据链路层以上采用相同的协议。

( 2 )交换机在数据链路层上实现互连的存储转发设备。交换机按每个包中的 MAC 地址相对简单地决策信息转发,交换机对应硬件设备,网桥对应软件。

  1. 局域网的关键技术?

答:拓扑结构(星形,总线型,环形,树型),介质访问方式( CSMA/CD , Token-passing ),信号传输形式(基带、宽带)。

  1. 网络接口卡(网卡)的功能?

答:( 1 )进行串行 / 并行转换。

( 2 )对数据进行缓存。

( 3 )在计算机的操作系统安装设备驱动程序。

( 4 )实现以太网协议。

  1. CSMA/CD ?答:是指载波监听多点接入 / 碰撞检测

  2. 以太网 MAC 帧格式?

目的地址( 6 字节)

源地址( 6 字节)

类型( 2 字节)

数据( 46 ——1500 字节)

FCS ( 4 字节)

  1. 无线局域网的 MAC 层?

答:( 1 )隐藏站问题,暴露站问题

( 2 ) CSMA/CA :是改进的 CSMA/CD ,增加的功能是碰撞避免,实际就是在发送数据之前对信道进行预约。

  1. 私有(保留)地址?

答:A 类: 10.0.0 .0 —— 10.255.255.255

B 类: 172.16.0.0 —— 172.31.255.255

C 类: 192.168.0.0 —— 192.168.255.255

  1. VLAN 是虚拟局域网的英文缩写,它是一个纯二层的技术,它的特点有三:广播风暴防范,安全,灵活性和可扩张性。

  2. SNMP 简单网络管理协议。

  3. TTL 是指生存时间

  4. 每个路由器在寻找路由时需要知道哪 5 部分信息?

答:目的地址:报文发送的目的地址

邻站的确定:指明谁直接连接到路由器的接口上

路由的发现:发现邻站知道哪些网络

选择路由:通过从邻站学习到的信息,提供最优的到达目的地的路径

保持路由信息:路由器保存一张路由表,它存储所知道的所有路由信息。

  1. 自适应网卡只有红灯闪烁,绿灯不亮,这种情况正常吗?

答:正常。自适应网卡红灯代表连通 / 工作,即连通时红灯长亮,传输数据时闪烁,绿灯代表全双工,即全双工状态是亮,半双工状态灭。如果一个半双工的网络设备(如 HUB )和自适应网络相连,由于这张网卡是自适应网卡,它就会工作在半双工状态,所以绿灯不亮也属于正常情况。

补充:网卡红绿灯是网卡工作的指示灯,红灯亮表示正在发送或接收数据,绿灯亮则表示网络连接正常。因此正常情况下应该是绿灯长亮,因为绿灯长亮才代表网络是通的。而有数据传输时,红灯就会闪烁。

  1. 两台笔记本电脑连起来后 ping (因特网包探索器)不同,你觉得可能存在哪些问题?

答:( 1 )首先考虑是否是网络的问题

( 2 )局域网设置问题,电脑互联是要设置的。看是否安装了必要的网络协议,最重要的是 IP 地址是否设置正确。

( 3 )网卡驱动未安装正确

( 4 )防火墙设置有问题

( 5 )是否有什么软件阻止了 ping 包

  1. 与 IP 协议配套的其他协议?

答: ARP :地址解析协议      RARP :逆地址解析协议

ICMP :因特网控制报文协议      IGMP :因特网组管理协议

  1. IP 地址分类?

答: IPv4 地址共有 32bit

网络号

网络范围

主机号

A 类

8bit   第一位固定为 0

0 —— 127

24bit

B 类

16bit  前两位固定为 10

128.0 —— 191.255

16bit

C 类

24bit  前三位固定为 110

192.0.0 —— 223.255.255

8bit

D 类

前四位固定为 1110 ,后面为多播地址   所以 D 类地址为多播地址

E 类

前五位固定为 11110 ,后面保留为今后所用

一般全 0 或全 1 的地址不使用,有特殊意思,主机地址为全 1 时为广播地址,全 0 时表示网络地址。同时127.0.0.1 表示回路, ping 该 IP 地址可以测试本机的 TCP/IP 协议安装是否成功。

IPv6 ?采用 128bit ,首部固定部分为 40 字节。

  1. 运输层协议与网络层协议的区别?

答:网络层协议负责的是提供主机间的逻辑通信

运输层协议负责的是提供进程间的逻辑通信

  1. 运输层的协议?

答: TCP ,传输单位称为: TCP 报文段

UDP ,传输单位称为:用户数据报

其端口的作用是识别那个应用程序在使用该协议。

  1. 接入网用的是什么接口?

答:一般采用 E1 , V.24 , V.35 ,等接口。

  1. OSI七层协议在网络传输中扮演的角色及功能:

7、应用层——–电脑的各种数据

6、表示层 ——– 处理用户信息的表示问题,如编码、数据格式转换和加密解密

5、会话层——–会话管理、会话流量控制、寻址、寻址

4、传输层——–各种协议(TCP/IP中的TCP协议、Novell网络中的SPX协议和微软的NetBIOS/NetBEUI协议。 )

3、网络层——–路由器(通过路由选择算法,为报文或分组通过通信子网选择最适当的路径)

2、数据链路层—-交换机/网桥(负责建立和管理节点间的链路,通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路)

1、物理层——–集线器/中继器(利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。)

  1. 1、Integer是int

标签: 光纤22n传感器er2

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司