面试题

			Linux

面试题1: 请简述top和ps的区别:
Top和ps都是linux用来查看进程的命令。ps是静态查看,top是动态查看进程。

ps一般用来查看是否启用哪个进程,top用来监控机子是否处于工作状态,ps有多少个显

示多少个进程


面试题2:请简述cat和tail -f 的区别
用来查看文件内容的,cat静态的。
Tail动态的,当数据发生变化立即回到控制台


面试题3:
Linux下jdk的安装配置(CentOS)
1、如果要使用开源的open-jdk,请安装open-jdk
如果不使用open-jdk,请先卸载
2、如果安装Oracle公司的jdk,那么请先卸载jdk
如果使用的是.rpm包,则直接安装即可,什么配置都不需要
rpm -ivh jdk1.8xxxx.rpm

如果使用tar包安装(店家推荐)
1、解压tar
2、进行环境变量的配置(重要,必须掌握)
     如果需要配置成用户级别的环境变量(不推荐)
     在这里配置:vim ~/.bash_profile

     一般建议配置成系统级别的:
     vim /etc/profile

     在最后添加如下代码:
     export JAVA_HOME=java的主目录
     export PATH=${PATH}:$JAVA_HOME/bin
     保存退出

     重启:source /etc/profile

    3、测试是否成功
        java -version
	javac -version

window下的jdk安装:下一步 下一步
配置问题: JAVA_HOME=java的主目录
path追加
path = path;%JAVA_HOME%/bin


面试题4:
请使用两种方式求单个字符’斌’的Unicode码
思路:
char a = ‘斌’;

    a + 1 - 1

答案:
public class mianshiti {
public static void main (String[] args) {
char a = ‘斌’;
//使用自动类型转换
int res = a + 1 - 1;
System.out.println(res) ;
int res2 = (int) a ;
System.out.println(res2) ;
}
}

			Java

面试题1:
在类的成员:
成员变量
成员方法
构造函数
构造代码块
静态代码块
(被static修饰的最早被加载,且按照顺序

走)
在类中,当初始化一个类的实例时,首先被加载的是 静态代码块(若是静态属性的话,按

照先后顺序走),
之后是属性,下来是构造代码块,最后是构造函数


面试题2:
请解释final finally finalize 三者的作用和区别
final 申明类的,

finalize();  //是object提供的方法,该方法在对象被垃圾机制回收前,最后

被触发
System.gc(); //手动调用垃圾回收机制

finally://一定执行的代码块
	//不管是否存在异常,finally内的代码块一定会执行
	//资源释放等工作在finally

面试题3:
在函数中,如果finally之前,遇到了return关键字,代码如何执行?会直接返

回还是执行完finally中的代码在返回?

答:try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 try

中的 return 语句先执行,finally 语句后执行,
但try中的 return 并不是让函数马上返回结果,而是 return 语句执行后,将把返回结

果放置进函数栈中,
此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回。但此时会出现两

种情况:
① 如果finally中也有return,则会直接返回finally中的return结果,并终止程序,函

数栈中的return不会被完成
② 如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中保存的

try return的内容返回并终止程序

注意:

1、不管有没有出现异常,finally块中代码都会执行
2、当try和catch中有return时,finally仍然会执行
3、finally是在try中return后面的表达式运算后执行的(此时并没有返回运算后的值,

而是先把要返回的值保存起来,
不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数

返回值是在finally执行前确定的
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存

的返回值


面试题4:
字符串存储的位置问题?
字符串存储在运行时常量池中

在jdk1.8之前 字符串存储在 方法区(method area),方法区一般是存储常量

的地方
在jdk1.8及其以后,字符串存储在 堆中


面试题5:(扩展题)
为什么在比较对象的时候我们需要重写hashcode和我们的equals方法?
1、hashCode作用主要在于增加数据在哈希家族中的查询速度。

2、如果hashCode相等,他们在哈希结构中存储位置相等,但是不是同一个对象!换句话说hashCode相等,调用equals不一定相等。

3、如果equals相等,那么他们的存储位置当然相等,所以hashCode一定也是相等的。

4、根据2、3两条,重写equals方法就一定要重写hashCode方法。


面试题6:如何高效计算8→2
int a = 8

a>>2   输出: 2
a<<2   输出:32

面试题7:
分析ArrayList和Vector的区别:

ArrayList和Vector都是数组实现的线性表,一般情况下用ArrayList,

因为效率原因。ArrayList的效率要远高于Vextor,ArratList是线程不安全的,Vector是

线程安全


面试题8:HashMap的put过程:
1.8之前,HashMap底层结构是一个数组+链表的实现
默认数组大小是16,负载因子是0.75
put第一步是:
对key进行hash算法,如果key为空,返回0,
若key不为空,首先获取key的hashCode值,再将该值有符号右移16位,
对两个值做异或运算,将结果返回
第二步:
判断是否需要扩容,如果需要则扩容
匹配对应的key,进入相应的桶,判断是否存在该key,若存在则覆盖;

否则 插入数据
再次判断需要则扩容

1.8及以后,HashMap底层实现数组+链表+红黑树的实现
		(红黑树和链表只能存在一个)
	当一个桶中插入的数据<=8时,1.8之前一模一样, 是 数组+链表
	当一个桶中插入的数据>8时,1.8之前一模一样,  是 数组+红黑树

面试题9:
HashMap和HashTable的区别?
HashMap线程不安全的,HashTable是线程安全的
HashMap不允许null值,HashTable允许null值
HashMap继承Dictionary类,HashTable实现Map接口


面试题10:
线程的状态:五种状态

创建(new)
就绪(ready)------↓
运行(running)--→这仨循环
锁定(block)------↑
摧毁(destroy)

面试题11:ArrayList和LinkedList的区别:
ArrayList 是连续数据
ArrayList查询速度快,增删改速度比较慢,
LinkedList查询速度慢,增删改速度比较快
LinkedList是典型的双向链表


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值