System.out.println(tt.ch);
System.out.println(tt.ck);
}
public void change(String str,char[] ch,Character ck){
str=“world”;
ch[0]=‘d’;
ck=‘c’;
System.out.println(“str+”+str.hashCode());
System.out.println(“ch+”+ch.hashCode());
System.out.println(“ckl+”+ck.hashCode());
}
}
输出:
str+113318802
ch+1828682968
ckl+99
--------
s+99162322
ch+1828682968
ck+107
--------
hello
dbc
k
可见,String类型是不会被修改的,在编译时,方法栈里有world,如果是输入赋值给String应该会变,char数组传递的是数组的引用,Character传递的是值
传值不会修改原来的,传引用会修改原来的。
七.i++与++i
public static void main(String[] args) throws Exception {
int a=1;
int b=a++; //先执行b=a,再执行a++
System.out.println(b++); //先执行print(b),再执行b++
}
输出:1
八.==与equals的区别
==:
1.在中,如果比较的是int,long,short这种基本数据类型,那么比较的是它们的值
2.若比较的引用数据类型,如类,String,那么比较的是它们的内存地址,除非是同一个new一个出来的对象,此时地址相同,返回ture,否则返回false
如:
String a= new String(“abc”);
String b=a;
sout(a==b); //ture
若:
String c= new String(“c”);
String c1= “c”;
sout(c==c1);//false
equals:
1.所有类都继承自Object,若不重写equals()方法,那么调用Object类中的equals()方法,源代码:
public boolean equals(Object obj) {
return (this == obj);
}
也就是仍然是比较其地址。
2.若重写其方法:
在String中:
源代码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
可以看出equals()是会先用==方法,然后比较两个String的值是否相等。
九.final,static关键字
final:
当用final修饰一个类时,表明这个类不能被继承,比如出于安全的考虑,可修饰为final。
如果只有在想明确禁止该方法在子类中被覆盖的情况下才将方法设置为final的。
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
static:
修饰类的成员变量时,每个类只有一个这个成员,而不是每个类的实例化对象都有一个这个变量。
用static修饰后,类名.方法名,类名.属性名,可直接调用,不用实例化对象,避免了先要new出对象的繁琐和资源消耗。
在创建对象时,static修饰的成员会首先被初始化。
十.sleep() 和 wait() 有什么区别?
sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过后,cpu才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep方法并不会释放锁,即使当前线程使用sleep方法让出了cpu,但其他被同步锁挡住了的线程也无法得到执行。wait是指在一个已经进入了同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行,只有其他线程调用了notify方法(notify并不释放锁,只是告诉调用过wait方法的线程可以去参与获得锁的竞争了,但不是马上得到锁,因为锁还在别人手里,别人还没释放。如果notify方法后面的代码还有很多,需要这些代码执行完后才会释放锁,可以在notfiy方法后增加一个等待和一些代码,看看效果),调用wait方法的线程就会解除wait状态和程序可以再次得到锁后继续向下运行。
十一.得到文件下的文件
public static void FileRead(String path)throws Exception{
File f= new File(path);
if(!f.exists())
System.out.println(“file not exist”);
if (f.isDirectory()) {
File[] ss = f.listFiles();
for (File s : ss) {
System.out.println(s.getPath()); // F:\txt\1.txt
}
}else{
System.out.println(f.getName());
}
}
十二.实现多线程的三种方法
1.继承thread类创建线程
public class MyThread extends Thread {
public void run() {
System.out.println(“MyThread.run()”);
}
}
MyThread myThread1 = new MyThread();
myThread1.start();
2.实现runnable接口创建线程
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println(“MyThread.run()”);
}
}
3.实现Callable接口通过FutureTask包装器来创建Thread线程
PS:别说四种,第四种无法理解
十三.抽象类与接口的区别
主要是:单继承(抽象类),多实现(接口)。
抽象类不能直接实例化对象,需要继承抽象类才能实例化其子类。
从使用上来看,一个类可以实现多个接口,但是不能继承多个抽象类。
接口的字段只能是 static 和 final 类型的,而抽象类的字段没有这种限制。
接口的成员只能是 public 的,而抽象类的成员可以有多种访问权限。
十四.String Pool
String pool 指字符串常量池,保存着所有在编译时就已经确定的String变量。调用String.intern()方法,可以将此String变量加入常量池中。
String pool在堆中。
String a= new String(“a”);
String a1= new String(“a”);
sout(a==a1);//false
String b=“b”;
String b1=“b”;
sout(b==b1);//true
String c= new String(“c”);
String c1= “c”;
sout(c==c1);//false
sout(c.equals(c1));//true
详情见 八. ==与equals的区别
十五.ArrayList和Vector的区别
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的。
(1)同步性:
Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最 好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的,它们是线程不安全的。所以,我们讲课时先讲老的。
(2)数据增长:
ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。
总结:即Vector增长原来的一倍,ArrayList增加原来的0.5倍。
十六.Java 中Collections类里的reverse (反转方法)
public static void reverse(List<?> list) {
int size = list.size();
if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {
for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j–)
swap(list, i, j);
} else {
ListIterator fwd = list.listIterator();
ListIterator rev = list.listIterator(size);
for (int i=0, mid=list.size()>>1; i<mid; i++) {
Object tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);
}
}
}
此方法可反转数组的值.
在此我向大家推荐一个架构资料,马士兵JVM精讲视频,关注我,私信回复**“资料”**里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
面试造火箭,工作拧螺丝,希望对你有所帮助
多多转发、点赞、评论、关注我、谢谢大家,让更多人受益!!!
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。
以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-vLRvUuyj-1712165756598)]
总结
面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。
以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考
[外链图片转存中…(img-MRCp9O4c-1712165756599)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算