java经典编程题程序题 急

从超高频的后端面试题出发,指明学习方向

还记得我的老弟小阿巴么?他目前正值大一暑假,在家自学编程(刷短视频)中。

他整个大一期间基本都在学习前端。后来,我带他写了一次后端,结果就崩了,写了一堆 bug!

详情请阅读:前端老弟第一次写后端,崩了!

但没想到,这货踩了坑后,反而爱上了后端开发。这一到周末就缠着我,让我给他讲讲后端开发应该学习哪些知识。

虽然很想给他总结一份后端学习路线,但我也很忙,于是就思考有没有什么更快捷的方式让他了解到后端要学的技术。

我想想:他学编程是为了找好工作,想找到好工作就要先通过面试。。。

有了!正好我朋友在大厂 “阿巴阿巴” 做 Java 后端面试官,我直接把小阿巴送过去参与面试,不就能让他知道自己要学的技术了么?

一天后,小阿巴回来了,一脸苦样,说自己一道题都没答出来。

我问了下考点,大笑道:你运气太好了,这不全是后端面试中的 超高频 经典题目么?全中!

好了,下面就通过这次的大厂面试题,分享下后端程序员要学的知识以及缘由。

后端必学 - 思维导图

对于开发岗位的程序员,无论是前端还是后端,最低要求都是 熟练使用 至少一门编程语言。像前端的核心语言是 JavaScript,后端有 Java、C++、Golang、Python 等。

目前 Java 后端岗位的需求量比较大,所以这里以 Java 为例。

熟练并不只是能写出代码就够了,很多编程语法层面的 小细节 也必须关注!在工作中,很多 bug 的产生正是因为对细节知识的欠缺,因此这些细节也是面试官最爱考察的点。

比如 Java 中的 == 和 equals 都是判断变量是否相等,但有啥区别呢?如果使用不当,很有可能会把相同值的变量判断为不相等,导致业务逻辑错误。还有 final 关键字、volatile 关键字等,都是常用的 Java 语法,也是高频考点。

所以,巩固语法基础很重要,推荐《Java 核心技术卷 I》。

Java 中的集合及其继承关系?

每种编程语言都有内置的类库和函数,虽然可能不是最方便的,但通常源码实现都比较合理、性能也不错。想熟练使用一门编程语言,提高开发效率,或者编写自己的封装库,就一定要先掌握语言原生的类库。

比如 Java 中提供了集合类,让我们很轻松地操作各种数据结构,比如数组、链表、Set、Hash 等,这些都是工作中常用的类,因此有必要了解它们的原理,才能更合理、正确地去使用。像 HashMap 的实现原理、HashMap 和 HashTable 的区别、ArrayList 和 LinkedList 的区别,也是高频考点。

Java 集合框架关系

什么是 Spring 的依赖注入?

除了做基础架构之外,在企业中开发基本都是用现成的框架,不用什么都自己写,能够大大提升开发效率。但会用框架只是最基本的要求,怎么能最大化框架的性能、降低出 bug 的概率、进一步降低开发成本、甚至如何自己设计实现一个框架,才是优秀的程序员应该思考的。因此,常用框架的设计原理是高频考点,比如 Java 中 Spring 框架的核心设计 IOC 和 AOP、使用多级缓存解决循环依赖等。

JVM 的内存结构是怎样的?

大厂面试中,少不了编程语言的底层实现。

虽然工作中很少会直接用到这方面的知识,但书到用时方恨少,大厂对求职者的需求通常不是你现在能做什么,而是你未来是否能够应对潜在的挑战。万一到时候线上程序出一个紧急且严重的 bug,需要分析垃圾收集器的日志,让你现学,还来得及么?这就要求我们了解底层,对 Java 来讲,关键就是 Java 虚拟机(JVM)。

此外,了解底层能够加深你对编程语言的理解和对架构的认知,很多底层的设计原理是可以应用到工作写程序中的,像如何分配管理内存、垃圾收集器的设计、回收算法等。

简单来说就是:把工具玩儿明白,让造工具成为可能。

推荐书籍:《深入理解Java虚拟机》第3版

《深入理解 Java 虚拟机》第3版

无论你学习什么编程语言,这些知识都是程序员重要的基本功。虽然未必在工作中直接用到,但打好基础,能够全方面提升你的编程能力和素养,在面对问题时才会有更多的想法和思考。

面试官通过这些问题,能看出你的学习是否扎实,是否可靠。

和数据结构类似,算法也是程序员的核心素养。像排序、动态规划、递归、迭代、二分、分治、深搜广搜等基础算法,都是面试的重点。

TCP 三次握手、四次挥手经历了哪些过程?

对后端开发而言,大部分的工作就是写接口,接受前端或其他客户端发送的网络请求,给出对应的数据响应。因此,网络知识相当重要。

比如工作中常用的网络协议、HTTP 请求与响应、会话、四七层负载均衡等,都是常见考点。因为很多的协议都是在 TCP、UDP 的基础上进行封装,所以 TCP 和 UDP 也是高频考点。了解这些有助于写出更优雅规范的接口、减少网络请求的耗时、或者提高整个接口的并发度等。

操作系统虽然是很底层的知识,但毕竟我们编写的程序都是跑在操作系统上的,因此操作系统的一些概念无时无刻不在被开发者使用,比如进程和线程、死锁、文件、套接字、CPU、内存管理、输入输出等。你思考问题的深度、程序性能优化的极限,很大程度上取决于对操作系统的了解。

MySQL 如何性能优化?

大部分做后端开发的程序员离不开数据库,而且工作中基本就是写 CRUD,从数据库中增删改查数据。

对于在学校里做的小项目,基本了解数据库的使用,会写几条简单的 SQL 语句就够了。但是在大厂业务(尤其是 ToC)中,数据量动辄百万千万、甚至数亿,这就对数据库设计和性能优化提出了要求。

因此,大厂后端面试中,超高频的面试题就是:MySQL 如何性能优化?对于这类问题,只靠背诵很容易被面试官揭穿,比较推荐自己去做个项目,设计个库表实战,看看不同的优化方式是否有效、能得到多大的效果。

还有很常见的面试题就是:给你一个场景,让你去设计数据库表结构。大部分题目都要求你临场发挥,所以在平时多做项目、多去参考其他系统的设计真的很重要。

此外,还要了解数据库中的常见概念,比如事务、锁、索引等;还有一些基本操作,比如存储过程、备份、定位慢查询。否则可能写出的代码会有 bug、一不小心插入的数据就不一致了、一不小心就把整个表给锁住了、删库跑路也无能为力等。

Redis 有哪些数据类型?

企业项目一般都是部署在云服务器上的,大部分服务器的操作系统都是 Linux,因此后端开发工作中,必不可少地要操作 Linux 服务器,比如部署项目、安装和配置服务、查看系统运行信息、定位线上问题排障等。

因此,要熟悉基本的 Linux 命令,能够适应无鼠标的命令行操作。

还要了解一些常用的系统分析命令,帮助排查问题。比如 top 命令,可以查看系统的资源占用、整体负载,还能具体查看每个进程占用了多少 CPU、内存,从而锁定异常线程。

你用过 Git 版本控制系统么?

企业开发大部分都是团队协同而非单兵作战,很多人要同时编写同一个项目的代码,那么如何保证代码的同步、减少冲突、查看改动呢?这就需要使用版本控制系统,目前最主流的是 Git。

如今,Git 已经是程序员的必修课了,但很多同学只是草草了解几个简单的 Git 操作,比如上传和更新代码到 GitHub,这是不行的。在工作中,还经常会用到工作区、分支、合并、回退、解决冲突的功能,也必须知道如何操作。

顺带一提,大多数员工刚进公司要做的事就是用 Git 拉取代码,如果连这个都不会,就真的很尴尬了。

什么是微服务?和传统架构有什么区别?

如今的架构形式丰富多彩,早就不是一套架构吃遍天的时代了。单点、集群、分布式、SOA、微服务、容器、云原生、服务网格,这些架构都有什么特点?分别适用于哪些场景?如何选择?如何实现?这些问题都是后端程序员需要考虑、学习和实践的。

听完我这一通分析,一向嚣张的小阿巴竟也变得沉默了,点了个 就放下了手机。

想学好后端进大厂,真的是任重而道远,大家加油!

我是鱼皮,最后再送大家一些 帮助我拿到大厂 offer 的学习资料

欢迎阅读 我从 0 自学进入腾讯的编程学习、实习、求职、考证、写书经历,不再迷茫!

楼主,你好,你要的结果是不是这个,写好了注解,请楼主验收:

祝楼主在JAVA学习上一帆风顺~~~

以下:T为正确,F为错误!

2. (T)接口中的所有方法都没有被实现

3. (F)定义完数组后,我们可以根据实际需要,再动态调整数组大小

4. (T) 实现一个接口,则在类中一定要实现接口中的所有方法。

5. (T) 类体中private修饰的变量在本类中能访问,类生成的对象也能访问。

6. (F)数组、类和接口都是引用数据类型

11. (F) 程序中抛出异常时(throw …),只能抛出自己定义的异常对象。

13. (T) 一个异常处理中 finally语句块只能有一个或者可以没有。

14. (T)抽象类不能实例化

15. (T)在Swing用户界面的程序设计中,容器可以被添加到其它容器中去

17. (T)在Java程序中,通过类的定义只能实现单重继承

18. (T)类A和类B位于同一个包中,则除了私有成员,类A可以访问类B的所有其他成员

19. (F)一个类中,只能拥有一个构造器方法

你都要给我100分了我还能不给你拿100分?呵呵

2. (T)接口中的所有方法都没有被实现

3. (F)定义完数组后,我们可以根据实际需要,再动态调整数组大小

4. (T) 实现一个接口,则在类中一定要实现接口中的所有方法。

5. (T) 类体中private修饰的变量在本类中能访问,类生成的对象也能访问。

6. (F)数组、类和接口都是引用数据类型

11. (F) 程序中抛出异常时(throw …),只能抛出自己定义的异常对象。

13. (T) 一个异常处理中 finally语句块只能有一个或者可以没有。

14. (T)抽象类不能实例化

15. (T)在Swing用户界面的程序设计中,容器可以被添加到其它容器中去

17. (T)在Java程序中,通过类的定义只能实现单重继承

18. (T)类A和类B位于同一个包中,则除了私有成员,类A可以访问类B的所有其他成员

19. (F)一个类中,只能拥有一个构造器方法

做得很快,没有去验证答案,虽不能保证100%对,但应付考试和作业没问题了。

针对下面大家的回复,解释一下:
第18题是对的。如果类A和类B在同一个包中,那么类A是可以访问类B中的protected成员的。

其他的答案我没有跟楼下(本来我是第一个,修改答案以后成最后一个了,所以这里应该是“楼上”)的比较。但是通过这两个题,我建议楼主以我的答案为准。

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。

程序设计》期末考试试题

的源代码中定义几个类,编译结果就生成几个以

创建新的类对象用关键字

,回收无用的类对象使用关键字

有垃圾回收机制,内存回收程序可在指定的时间释放内存对象。

.构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为

中的代码可能产生多种异常则可以对应多个

中的参数类型有父类子类关系,

此时应该将父类放在后面,子类放在前面。

方法的类是抽象类,但抽象类中可以没有

的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点。

.静态初始化器是在其所属的类加载内存时由系统自动调用执行。

中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋

.以下关于继承的叙述正确的是(

中一个类只能实现一个接口

中一个类不能同时继承一个类和实现一个接口

方法使用哪种类型的参数

.以下哪项可能包含菜单条(

.若需要定义一个类域或类方法,应使用哪种修饰符?(

我要回帖

更多关于 java经典编程题 的文章

 

随机推荐