1.编程语言面试题之新版javase基础语法篇之运算符
你知道 运算符 &和&&、|和||的区别吗?
& 按位与操作
只有对应的两个二进制数为1时,结果位才为1
1&1 = 1
1&0 = 0
0&1 = 0
0&0 = 0
| 按位或操作
有一个为1的时候,结果位就为1
1|1 = 1
1|0 = 1
0|1 = 1
0|0 = 0 & 和 && 都可以实现 和 这个功能 区别:& 两边都运算,而 && 先算 && 左侧,若左侧为false 那么右侧就不运算,判断语句中推荐使用 &&,效率更高 | 和 || 和上面类似 区别:||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断 把&&和||称之为短路运算符
用最有效率的方法计算2乘以8
原理:将一个数左移n位,相当于乘以2的n次方,位运算是CPU直接支持的,所以效率高 答案:2<<3 常见的JDK源码里面HashMap的默认容量16 int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 直接是二进制操作了,表示1左移4位,变成10000,转为10进制也就是16, 直接以二进制形式去运行,效率更高

2.异或运算在面试中的考查点和分析
写个方法,传递两个非0的int数值进去,实现变量交换的方式,有几种方式?
方式一
public static void swap(int a, int b){
System.out.printf("a=%d, b=%d",a,b);
a = a + b;
b = a - b ;
a = a - b;
System.out.printf("\na=%d, b=%d",a,b);
} 方式二
public static void swap2(int a, int b){
System.out.printf("\na=%d, b=%d",a,b);
a = a^b; // a1 = a^b
b = b^a; // b = b^a^b
a = a^b; // a = a1^b = a^b^a
System.out.printf("\na=%d, b=%d",a,b);
} 



3.编程语言面试题之新版javase基础语法篇之类型
说下java数据类型分类
- 基础数据类型:byte、short、int、long、float、double、char、boolean
- 引用数据类型:其他都是引用类型
- String和Enum分别是什么类型:引用类型
运算
定义变量 int i = 5; return i++; 和 return ++i; 返回结果是什么




== 和equals的区别
- 基本数据类型比较 要用==判断是否相等
- 引用数据类型: ==比较的是内存地址是否一样,不同对象的内存地址不一样,equals比较的是具体的内容, 也可以让开发者去定义什么条件去判断两个对象是否一样
4.编程语言面试题之新版javase基础语法篇 try-catch-finally
下面代码 的try-catch-finally语句,try里面有个return, finally里面也有个return,结果会返回什么?为什么
public class test {
public static void main(String[] args) {
System.out.println(test1());
System.out.println(test2());
}
public static int test1() {
int a = 1;
try {
System.out.println(a / 0);
a = 2;
} catch (ArithmeticException e) {
a = 3;
return a;//确定了返回值是3,再执行finally,虽然finally里面a=4,但是其那面已经确定是3了,所以返回3
} finally {
a = 4;
}
return a;
}
public static int test2() {
int a = 1;
try {
System.out.println(a / 0);
a = 2;
} catch (ArithmeticException e) {
a = 3;
return a;
} finally {
a = 4;//catch确定了返回值是3,再执行finally,finally里面a=4,但是有心得return,重新确定了返回值,所以是4
return a;
}
}
}
控制台输出




5.编程语言面试题之新版JDK9基础语法篇 try-with-resource
有了解新版的JDK处理IO流吗?编写下基础代码, 从一个txt文本里面,拷贝里面的内容到另外一个txt文本里面
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class test {
public static void main(String[] args) {
try (
FileInputStream fis = new FileInputStream("C:\\Users\\dbc\\Desktop\\123.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("C:\\Users\\dbc\\Desktop\\321.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);) {
int size;
byte[] buf = new byte[1024];
while ((size = bis.read(buf)) != -1) {
bos.write(buf, 0, size);
}
} catch (
Exception e) {
e.printStackTrace();
}
}
}
6.编程语言面试题之文件API和递归考察
代码编写需求: 找出某目录下的所有子目录以及子文件并打印到控制台上
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class test {
public static void main(String[] args) {
//找出某目录下的所有子目录以及子文件并打印到控制台上
List<String> paths = new ArrayList<>();
getAllFilePaths(new File("C:\\Users\\dbc\\Desktop\\demoAll"),paths);
for(String path : paths){
System.out.println(path);
}
}
private static void getAllFilePaths(File filePath, List<String> paths) {
// filePath.listFiles()文件全部遍历出来
File[] files = filePath.listFiles();
//如果空了,那么就返回
if(files == null){
return;
}
for(File f : files){
//如果是一个目录,那么继续循环
if(f.isDirectory()){
paths.add(f.getPath());
getAllFilePaths(f,paths);
}else{
//如果不是那么就是加入数组
paths.add(f.getPath());
}
}
}
}
7.编程语言面试题之新版javase字符串(重点)
问题1: String str = new String("xdclass.net"); 创建了几个对象?
问题2: 下面是比较什么?输出结果是什么?为什么是这样的结果
String str1 = new String("xdclass.net");
String str2 = "xdclass.net";
String str3 = "xdclass.net";
System.out.println(str1 == str2);
System.out.println(str2 == str3); 问题3: 写出下面代码的各个结果?如果需要两个都为true,应该怎么修改`
public class test {
public static void main(String[] args) {
String s1 = "xdclass";
String s2 = s1 + ".net"; //变量 + 常量 = 来自堆
String s3 = "xdclass" + ".net"; //常量 + 常量 = 来自常量池
System.out.println(s2 == "xdclass.net");
System.out.println(s3 == "xdclass.net");
}
} 



如下图修改
public class test {
public static void main(String[] args) {
final String s1 = "xdclass";
String s2 = s1 + ".net"; //变量 + 常量 = 来自堆
String s3 = "xdclass" + ".net"; //常量 + 常量 = 来自常量池
System.out.println(s2 == "xdclass.net");
System.out.println(s3 == "xdclass.net");
}
} 



8.编程语言面试题之新版javase字符串相关构建类
String、StringBuffer与StringBuilder的区别?分别在哪些场景下使用
9.编程语言面试题之新版javase面向对象篇
面向对象的四大特性是?分别解释下
10.编程语言面试题之新版javase接口篇
Overload和Override的区别?
接口是否可以继承接口?接口是否支持多继承?类是否支持多继承?接口里面是否可以有方法实现
是否了解JDK8里面接口新特性
本文作者为DBC,转载请注明。
