面试时考查:
Java基础
逻辑思维
读代码能力
写代码能力(编程题)
算法题
学习过程中 要从网上找题刷题!
再看公司的需求 去实习看需求 再去学习更多的知识
有一项能力特别好 别人才相信你也可以其他做的好
比如面试时会考如何实现多继承
答:借助内部类
今天是Java基础第一讲
老师从java发展史讲起:
面试会问垃圾回收机制
最好学习一些源码 比如String源码
拓展了解垃圾回收机制
Java基础学完做个qq出来
web socket 和 http 两个协议区别:
WebSocket是HTML5中的协议,支持持久连接;而Http协议不支持持久连接。
首先HTMl5指的是一系列新的API,或者说新规范,新技术。WebSocket是HTML5中新协议、新API.
Http协议本身只有1.0和1.1,也就是所谓的Keep-alive,把多个Http请求合并为一个。
请参见:http://www.cnblogs.com/Herzog3/p/5088130.html
身边的朋友 环境会决定你的高度
软件工程 相关
静态 动态用 static 关键字区别
全局变量和局部变量:
全局变量有默认初始值
局部变量没有默认初始值,必须初始化!
要看API文档以了解常用类对象 这样用的时候才能想起来
给两个日期,判断两个日期相差多少天:
(应用到新用户送会员)
思考:
怎么判断一个字符串是否是有限的IP地址
怎么把一个字符串中的所有d换为a
经典问题总结:
1 抽象和封装的不同点:
答:
抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。
2 什么是Java虚拟机?
答:
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
3 JDK和JRE的区别是什么?
答:
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。
4 ”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
答:
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
5 是否可以在static环境中访问非static变量?
答:
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
老师给的Java面试题:
http://pan.baidu.com/s/1eRYMQIm
(老师给了答案后我在更新上传答案doc文档)
个人解答的其中部分招聘面试题:
(有错误请批评指正 感谢)
1 一天有个年轻人来到王老板的店里买了一件礼物。这件礼物成本是18元,标价是21元。这个年轻人掏出100元要买这件礼物,王老板当时没有零钱,用那100元向街坊换了100元的零钱,找给年轻人79元。 但是街坊后来发现那100元是假钞,王老板无奈还了街坊100元。请问王老板在这次交易中到底损失了多少钱?(按成本计算,请写出答案和推理过程)
答:
若不还100元 王老板赚 3 元 (21-18) 3-100=-97 所以赔97元
2 请写出以下代码的输出结果
public class TestThree {
private void test(int param) {
switch (param) {
case 1:
System.out.println("Selected 1.");
case 2:
System.out.println("Selected 2.");
case 3:
System.out.println("Selected 3.");
default:
System.out.println("Default seleted.");
}
}
public static void main(String[] args) {
new TestThree().test(2);
}
}
结果:
Selected 2.
Selected 3.
Default seleted.
3 请写出以下代码的输出结果
public class Test{
int a;
int b;
public void f(){
a = 0;
b = 0;
int [] c ={0};
g(b,c);
System.out.println(a+" "+b+" "+c[0]+" ");
}
public void g(int b,int[] c){
a=1;
b=1;
c[0]=1;
}
public static void main(String args){
Test obj = new Test();
obj.f();
}
}
结果:
1 0 1
分析:
a和b是全局变量 a=1好理解
b=0 是因为 g() 函数里面定义了局部变量b 导致函数的局部代码块中的 b=1 影响的是形参b (此情况下 全局b 不可见)
但数组传入是的 引用(类似于C中的指针),所以数组肯定会改变
4 编写一个程序,产生ArrayIndexOutOfBoundsException异常,并捕获该异常,在控制台输出异常信息。
public class ArrayException {
public static void main(String[] args) {
int[] arr = {1,2};
int i = 0;
try {
while( i < 3 ) {
System.out.println(arr[i]);
i++;
}
}catch(ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
System.out.println("数组越界异常");
}finally {
System.err.println("over");
}
}
}
输出:
over
数组越界异常
5 现有100个人,其中1个是人类,99个是僵尸,现在这个人类有抗僵尸能力,僵尸吃了可以变回人类(当然被吃的就死了),一个人类可以被两个僵尸吃掉,请问最后可以有多少个人类存活?
public class test {
public static void main(String[] args) {
int sum = 100;
int man_num = 1;
int zom_num = 99;
while( 2*man_num <= zom_num ) {
sum = sum - man_num;
zom_num = zom_num - 2*man_num;
man_num *= 2;
}
int res = man_num - (zom_num+1)/2 + zom_num;
System.out.println("最后存活人类:"+res);
}
}
分析:
注意:
最后人数计算中牺牲人数计算方法 (zom_num+1)/2 处理是考虑上次僵尸个数为奇数情况 比如僵尸数为3 需要吃1.5个人 牺牲的人数为2