首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
喜欢走神的布莱恩想开了
山西工程科技职业大学 Java
发布于山西
关注
已关注
取消关注
@小熊学Java:
Java SE面试题汇总
最近整理的10w字Java面试手册,涵盖了Java面试几乎都会问的面试题目 小熊学Java在线地址:https://javaxiaobear.gitee.io/ 领取:https://docs.qq.com/doc/DRGx5QXJrQWdmRFR4 1、Java 有没有 goto 语句? goto是 Java 中的保留字,在目前版本的 Java 中没有使用。根据 James Gosling Java 之父)编写的《 The Java Programming Language 》一书的附录中给出了一个 Java 关键字列表,其中有 goto 和 const ,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉 C 语言的程序员都知道,在系统类库中使 用过的有特殊意义的单词或单词的组合都被视为保留字 。 2、& 和 && 的区别 &运算符有两种用法: 按位与 逻辑与 &&运算符是短路与运算。逻辑与跟短路与的差别是非常 巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true &&之所以称为短路 运算是因为,如果 左边的表达式的值是 false ,右边的表达式会被直接短路掉,不会进行运算。很多时候 我们可能都需要用 而不是 &&,例如在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为 username != null &&!username.equals("") equals(""),二者的顺序不能交换,更不能用 运算符,因为第一个条件如果不 成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。 注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。 3、在 Java 中,如何跳出当前的多重嵌套循环? 使用标签跳出循环,在最外层循环前加一个标记如A ,然后用 break A; 可以跳出多重循环。 loop: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { for (int k = 0; k < 10; k++) { for (int h = 0; h < 10; h++) { if (h == 6) { break loop; } System.out.print(h); } } } } 其次: break是跳出当前for循环 continue是跳出当前循环,开始下一循环 4、两个对象值相同 (x.equals(y) == true) ,但却可有不同的 hashCode 这句 话对不对? 不对。如果x.equals(y) == true,则它们的哈希码应当相同 Java对于 eqauls 方法和 hashCode 方法是这样规定的: (1)如果两个对象相同( equals 方法返回 true ),那么它们的 hashCode 值一定要相同; (2)如果两个对象的 hashCode 相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在 Set 集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。 首先equals 方法必须满足 自反性( x.equals(x) 必须返回 true ) 对称性 x.equals(y) 返回 true 时, y.equals(x)也必须返回 true ) 传递性 x .equals( 和 y.equals(z) 都返回 true 时, x.equals(z) 也必须返回 true ) 一致性(当x 和 y 引用的对象信息没有被修改时,多次调用 x.equals(y) 应该得到同样的返回值) 而且对于任何非 null 值的引用 x x.equals(null) 必须返回 false 。 实现高质量的 equals 方法的诀窍包括: 使用 操作符检查 参数是否为这个对象的引用 使用 instanceof 操作符检查 参数是否为正确的类型 对于类中的关键属性,检查参数传入对象的属性是否与之相匹配; 编写完 equals 方法后,问自己它是否满足对称性、传递性、一致性; 重写 equals 时总是要重写 hashCode 不要将 equals 方法参数中的 Object 对象替换为其他的类型,在重写时不要忘掉@Override(992988) 注解。 5、是否可以继承 String 不可以。String类是final类,不可以继承。 6、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递。 Java 语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对 对象引用的改变是不会影响到调用者的。 C++和 C# 中可以通过传引用或传输出参数来改变传入的参数的值 。 说明: Java 中没有传引用实在是非常的不方便,这一点在 Java 8 中仍然没有得到改进,正是如此在 Java 编写的代码中才会出现大量的 Wrapper 类(将需要通过方法调用修改的引用置于一个 Wrapper 类中,再将 Wrapper 对象传入方法),这样的做法只会让代码变得臃肿,尤其是让从 C 和 C++ 转型为 Java 程序员的开发者无法容忍。 7、重载(overload)和重写(override)的区别 重载的方法能否根据返回类型进行区分? 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载; 重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。 重载对返回类型没有特殊的要求。 方法重载的规则: 方法名一致,参数列表中参数的顺序,类型,个数不同。 重载与方法的返回值无关,存在于父类和子类, 同类中。 可以抛出不同的异常,可以有不同修饰符。 方法重写的规则: 参数列表必须完全与被重写方法的一致,返回类型必须完全与被重写方法的返回类型一致。 构造方法不能被重写,声明为 final 的方法不能被重写,声明为 static 的方法不能被重写,但是能够被再次声明。 访问权限不能比父类中被重写的方法的访问权限更低。 重写的方法能够抛出任何非强制异常( UncheckedException ,也叫非运行时异常),无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异 常,反之则可以。 8、为什么函数不能根据返回类型来区分重载? 因为调用时不能指定类型信息,编译器不知道你要调用哪个函数。 例如: float findMin(int a,int b); int findMin(int a,int b); 当调用 max(1, 2); 时无法确定调用的是哪个,单从这一点上来说,仅返回值类型不同的重载是不应该允许的。 函数的返回值只是作为函数运行之后的一个“状态”,他是保持方法的调用者与被调用者进行通信的关键。并不能作为某个方法的“标识”。 9、char 型变量中能不能存储一个中文汉字,为什么? char 类型可以存储一个中文汉字,因为 Java 中使用的编码是 Unicode (不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字节( 16 比特),所以放一个中文是没问题的。 补充:使用 Unicode 意味着字符在 JVM 内部和外部有不同的表现形式,在 JVM 内部都是 Unicode ,当这个字符被从 JVM 内部转移到外部时(例如存入文件系统中),需要进行编码转换。所以 Java 中有字节流和字符流,以及在字符流和字节流之间进行转换的转换流,如 InputStreamReader 和 OutputStreamReader ,这两个类是字节流和字符流之间的适配器类,承担了编码转换的任务; 10、抽象类(abstract)和接口(interface) 有什么异同? 抽象类 接口 不同点 1.抽象类中可以定义构造器 2.可以有抽象方法和具体方法 3.接口中的成员全都是 public 的 4.抽象类中可以定义成员变量 5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法 6.抽象类中可以包含静态方法 7.一个类只能继承一个抽象类 1.接口中不能定义构造器 2.方法全部都是抽象方法 3.抽象类中的成员可以是 private 、默认、 protected 、 public 4.接口中定义的成员变量实际上都是常量 5.接口中不能有静态方法 6.一个类可以实现多个接口 相同点: 不能够实例化 可以将抽象类和接口类型作为引用类型 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类 11、抽象的(abstract) 方法是否可同时是静态的 (static), 是否可同时是本地方法(native),是否可同时被 synchronized? 都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。synchronized和方法的实现细节有关,抽象方法不涉及细节,因此也是互相矛盾的。 12、阐述静态变量和实例变量的区别? 静态变量:是被static修饰的变量,也称为类变量,它属于类,不属于类中的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝。 实例变量:必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。 13、== 和 equals 的区别? equals与 == 的最大区别:一个是方法,一个是运算符 ==: 如果比较的对象是基本类型,则比较数值是否相等 如果比较的对象是封装类型,则比较对象的地址值是否相等 equals:用来比较方法两个对象的内容是否相等 注:equals 方法不能用于基本数据类型的变量,如果没有对 equals 方法进行重写,则比较的是引用类型的变量所指向的对象的地址。 String a = "a"; String b = "a"; //这样定义的a和b指向的是字符串常量区变量,地址是一样的,即用equals为true,用==也为true。 String s1=new String("xyz"); //创建了String类型的内容为xyz的s1对象 String s2=new String("xyz"); //创建了String类型的内容为xyz的s2对象 Boolean b1=s1.equals(s2); //比较s1对象和s2对象的内容相等,返回true。 Boolean b2=(s1==s2); //比较s1和s2两个对象的存储地址是否相等,明显两者分别存储在不同的地址,所以返回:false 14、break 和 continue 的区别? break和 continue 都是用来控制循环的 语句。 break:用于完全结束一个循环,跳出循环体执行循环后面的语句。 continue:用于跳过本次循环,执行下次循环。 15、String s = "Hello";s = s + " world!"; 这两行代码执行后,原始的 String 对象中的内容到底变了没有? 没有。因为String类是不可变类,它的所有对象都是不可变对象。在这段代码中, s 原先指向一个 String 对象,内容是"Hello",然后我们对 s 进行了“ 操作,那么 s 所指向的那个对象是否发生了改变呢?答案是没有。这时, s 不指向原来那个对象了,而指向了另一个 String 对象,内容为 "Hello world!",原来那个对象还是存在内存中。只是s这个引用变量不再指向它了
点赞 4
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
05-23 14:28
已编辑
门头沟学院 前端工程师
实习别瞎混!别干了很长dirty活,无效实习
总结:先谈谈实习的意义> 一句话就是包装简历,公司Title、实习业务等都帮忙润色简历,给简历加上亮点。有些岗位如运营、产品完全靠实习撑着,研发和算法岗没实习还可以通过项目和论文撑一下,看具体岗位的往届应聘者的经历,参照着做这部分我聊聊我个人的三个关注点:1.去那实习? 2.实习目的是什么?3.是好是坏?去那:BAT>大厂核心业务>中大厂核心业务>大厂边缘业务,业务推荐:电商、短视频等,累但垂直公司多为啥:不可置疑,现在中大厂挺看重实习的,是筛简历+排序的重要指标。对于我们就是去"润色简历",提高个人竞争力。所以,对于实习生自己,就是快速Landin...
点赞
评论
收藏
分享
05-24 15:08
阿里巴巴集团_大数据开发
「社招」美团跳槽阿里-大数据开发
一、背景科班出身,工作两年,一直在美团CLC做大数据开发。这次跳槽不是主动看机会的,而是实在扛不住了。手头的项目坑太多,老板的工作重心又全面转向AI,我这边的工作内容跟他的方向完全对不上,每天有种"你打你的我打我的"的错位感。长期下去既没有成长空间,也看不到产出被认可的可能,与其在一个越来越拧巴的环境里消耗,不如换个地方。整体面试周期大概3周,技术面三轮加一轮业务老大和HRG的综合面,阿里的节奏比我想象中要快一些。二、第一轮开场就是自我介绍,我大概讲了一下背景,重点落在数仓相关的工作经历上,也顺带提了一点AI方面的接触——毕竟现在团队方向在AI,这方面多少有点了解。面试官问...
查看13道真题和解析
点赞
评论
收藏
分享
04-13 15:34
贵州财经大学 人工智能
我就想找个8k的这么难
大概六个平台,投了快小一千份了,一个约面没有。目前是在实习,转正答辩已过,但是工资只有5k,想找8k左右的,求大佬们拷打一下😩目前在贵州,想去深杭。
程序员小白条:
AI方面很卷的啦,你这写太常规了,没亮点,而且需要竞赛和论文
春招至今,你收到几个面试...
点赞
评论
收藏
分享
05-27 14:05
门头沟学院 Java
27届暑期后端高频面试题汇总(字节腾讯美团等多家大厂)
最近把牛客上近一个月Java 后端面经挨个翻了一遍,有字节、腾讯、拼多多、快手、美团、滴滴等这些公司,整理了各家闻到的高频题目和知识点,牛友有需要的自取。题目均来自其他牛友发的面经,真实可靠,每道题也都标注了来源觉得有帮助的话,辛苦点赞收藏转发一键三连,需要其他岗位的,也可以评论留言一、集合(几乎每家一面必问)1. HashMap 底层数据结构 / 怎么扩容?来源:快手后端一面、字节中国交易与广告一面、转转Java实习、腾讯二面、腾讯云智一面快手追问:哈希表遍历是有序还是随机?排序规则?怎么计算桶位(自定义对象呢)?字节追问:Java 17 的 HashMap 插入/查找时间复杂度2. Has...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
27届暑期前端高频面试题汇总(字节百度阿里快手等多家大厂)
5442
2
...
字节三面
2009
3
...
美团计划裁员30%,测试和产品砍一半,测试全栈化时代来了!
1435
4
...
26前端的深夜
1327
5
...
26届学院本总结
1280
6
...
字节实习一个月祛魅了
992
7
...
继续实习VS暑假沉淀,怎么选....
974
8
...
你说你用Claude,你用的是 CLI,还是 Agent、Opus?
953
9
...
今天陌陌的笔试怎么样
953
10
...
收到了字节的AIoffer
784
创作者周榜
更多
正在热议
更多
#
实习生的蛐蛐区
#
1011726次浏览
5149人参与
#
求职遇到的搞笑事件
#
197896次浏览
993人参与
#
发面经攒人品
#
8920106次浏览
98886人参与
#
体制内上岸心路历程
#
39196次浏览
223人参与
#
27届实习投递记录
#
167969次浏览
1688人参与
#
担心入职之后被发现很菜怎么办
#
307668次浏览
1223人参与
#
你收到了团子的OC了吗
#
1640053次浏览
11866人参与
#
万物皆可发面经
#
6021次浏览
74人参与
#
扒一扒那些奇葩实习经历
#
161065次浏览
1184人参与
#
现在还是0offer,延毕还是备考
#
1434431次浏览
7969人参与
#
招聘要求与实际实习内容不符怎么办
#
227161次浏览
1078人参与
#
实习,不懂就问
#
232815次浏览
1772人参与
#
AI了,我在打一种很新的工
#
212685次浏览
2382人参与
#
HR问:你期望的薪资是多少?如何回答
#
103435次浏览
841人参与
#
父母对你找工作是助力还是阻力?
#
54090次浏览
478人参与
#
查收我的offer竞争力报告
#
303780次浏览
1761人参与
#
秋招盘点:机械人值得去的企业
#
109042次浏览
746人参与
#
实习最想跑路的瞬间
#
147980次浏览
787人参与
#
美团秋招笔试
#
222229次浏览
1203人参与
#
地方国企笔面经互助
#
43486次浏览
113人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务