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,转载请注明。