案例
++i和i++有什么区别?volatile关键字?能保证这个操作的原子性吗?
1、请补全下面代码,达到所需输出的效果
public static void main(String[] args) throws Exception { List<Integer> list = new ArrayList<>(); list.add(1); //请在此处补全代码 System.out.println(list); //期望输出为:[1, a, 2, b] }
2、判断下面输出什么内容?
输出内容eg:
java.lang.Number
java.lang.Integer
等类似的
public static void main(String[] args) throws NoSuchFieldException { Field id = Son.class.getField("id"); System.out.println(id.getType()); } class Son extends BaseEntity<Integer> { public String name; } class BaseEntity<PK extends Number> { public PK id; }
public static void main(String[] args) throws NoSuchFieldException { Field id = Son.class.getField("id"); System.out.println(id.getType()); } class Son extends BaseEntity<Integer> { public String id; public String name; } class BaseEntity<PK extends Number> { public PK id; }
说说给String直接赋值,和采用new赋值有什么异同?
略
注解的属性们,都必须有默认值吗?属性们能够哪些类型?
答:属性的default默认值都不是必须的。若不指定默认值,使用该注解时每个属性都必填,所以一般建议给默认值
**只有你的属性叫“value()”,并且使用时只给他一个赋值的时候是可以省略的~~~**,其余情况均不能省略
它支持的类型;
所有基本类型(int,float,boolean,byte,double,char,long,short)
String
Class
enum
Annotation
上述类型的数
方法内部可以书写代码块吗?可以书写多个吗?若能说说它有什么好处
可以的。
// 代码方法内部定义的变量互不干扰,有很好的隔离效果 public void fun1() { { String s = "demo"; // 代码块一 } { //System.out.println(s); // 此处不能引入变量s // 代码块二 } }
阐述你对Java中eq方法和==的区别?说得越详细越好?举例说明
要点:答出重写HashCode不能改变==是至少的要求
下面编译报错吗?不抱错会输出什么呢?
public static void main(String[] args) { Map<String,String> map = new HashMap<>(); System.out.println(map.put("a","a")); System.out.println(map.putIfAbsent("b","b")); System.out.println(map.putIfAbsent("b","b")); }
面试题:Map的put方法,相同的key会被覆盖,请解释相同二字
略
System.out.print的输出、输出流为什么不用手动关闭呢?
public static void main(String[] args) { PrintStream out = System.out; out.println("我"); out.close(); out.println("爱"); out.println("中"); out.println("国"); }
请问上述会输出什么?
那为什么我们平时不需要自己手动去关闭呢?请回答
针对Map的put方法,请输出下面的打印结果?并解释为什么?
public static void main(String[] args) { Map<String,String> map = new HashMap<>(); System.out.println(map.put("a","a")); System.out.println(map.putIfAbsent("b","b")); System.out.println(map.putIfAbsent("b","c")); //put的用法 System.out.println(map.put("c","c")); System.out.println(map.put("d","d")); System.out.println(map.put("c","d")); }
void.class == Void.class是true还是false
答案:false
public static void main(String[] args) { System.out.println(void.class); // void System.out.println(Void.class); // class java.lang.Void }
同样的int.class == Integer.class都是false的~
当我们比较Boolean包装类型时,可能遇到的坑
public static void main(String[] args) { Boolean b = null; System.out.println(b == Boolean.TRUE); //false 此处不报错 System.out.println(b == true); //java.lang.NullPointerException } public static void main(String[] args) { Boolean b = new Boolean(true); System.out.println(b == new Boolean(true)); //false System.out.println(b == Boolean.TRUE); //false System.out.println(b == Boolean.TRUE.booleanValue()); //true System.out.println(b == true); //true }
比如上面的例子。如果是包装类型,千万不要简单的用if(b == true)来判断
说说i++和++i的区别?
说出下面两题的答案:
public static void main(String[] args) throws InterruptedException { int i = 1; System.out.println((i++) - (++i)); i=5; System.out.println((++i)+(++i)+(++i)); }
答案:-2 21
原因(第一题为例):第一个i++是先用i的值,所以表达式取值1,最后i的值变为了2。到第二个++i时,表达式取值为3了。所以最终为1-3 = -2
使用javap -c -l Main.class可以查看字节码最终执行的指令,一目了然
maven相关的面试:
maven有哪些优点?
(1)依赖管理,节省空间
(2)一键构建 编码 编译 测试(junit) 运行 打包 部署
(3)应用于大型项目 可以提高开发效率
Maven常见的依赖范围有哪些?
编译 测试 运行 打包
compile(struts2-core) 要 要 要 要
provided(jsp-api.jar) 要 要 不要 不要
runtime(数据库驱动包) 不要 要 要 要
test(junit.jar) 不要 要 不要 不要
maven中怎么排除依赖?Optional和Exclusions的使用的异同?
在maven的依赖管理中,有两种方式可以对依赖关系进行,分别是可选依赖(Optional Dependencies)以及依赖排除(Dependency Exclusions)
maven的常用命令
Clean 清理编译的文件
Compile 编译了主目录的文件
Test 编译并运行了test目录的代码
Package 打包
Install 就是把项目发布到本地仓库
deploy 发布到私服
Tomcat:run 一键启动
坐标的组成 (GAV)
Gruop Id
Artifact Id
Version
Maven版本冲突出现的原因?maven是如何自动解决冲突的依赖的?
1、路径最短原则
2、**优先声明原则:**当出现路径长短相同的时候,谁先声明就用谁。如F1和F2的路径距离相同,但是由于F1比F2先声明(B比C先声明),所以最终使用F1。
优先声明的解释:如果你是在自己的pom里书写(并不是间接依赖进来的),那么下面的版本号是会覆盖上面的
说说Maven的包的依赖关系怎么决定的?
自定义maben骨架模版、自定义maven插件的步骤?使用场景呢?
mvn deploy之前需要先执行clean吗?有必要吗?如果不执行会不会有问题?
怎么解释最近依赖原则?怎么解释同路径长度的依赖呢?
maven打包src/main/java的xml、properties等文件
这里面我推荐这篇文章来解答:maven资源文件的相关配置
<!-- directory:属性指定资源文件放置的目录。 includes:包含哪些配置文件(.class文件不用写) filtering:如果设置为false的话,则表示上文的filters配置失效;如果设置为true,则会根据${env}.properties里面的键值对来 填充includes指定文件里的${xxxx}占位符(若不做环境区分,一般就是false即可) --> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.tld</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.tld</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
maven中的scope和optional的区别???
maven的scope决定依赖的包是否加入本工程的classpath
下,下面一幅图就能看懂
optional与scope区别在于:仅限制依赖包的传递性,不影响依赖包的classpath
比如如下例子:A->B, B->C(scope:compile, optional:true)
B的编译/运行/测试classpath都有C,所以非常良好木有问题
但是,A因为是间接依赖的C,但是因为c上有optional:true,所以A中的编译/运行/测试classpath都是不会有C的。(尽管C是compile),可见optional的优先级比scope高
optional:true的功能特别像scope:provided,所以姑且可以认为他俩没有太大的区别~