当前位置:   article > 正文

java架构师常见的基础面试题及答案(一),基础+底层+算法+数据库_架构师面试题

架构师面试题

10. select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。

二二、oracle中 rownum与rowid的理解,一千条记录我查200到300的记录怎么查?

二三、如何分析ORACLE的执行计划?

二四、 DB中索引原理,种类,使用索引的好处和问题是什么?

原理:因为检索磁盘比对数据,需要大量的时间和IO,所以就需要构造某列的数据的btree、hash值、位图索引。一般的索引能快速的查找比对,而索引的值记录了磁盘的位置,直接读取数据库字段对应位置的内容。

索引好处:加快数据检索速度、加速表与表之间的连接特别是实现数据的参考完整性方面有特别的意义、减少查询中分组和排序的时间,使用优化隐藏器,提高系统性能。

缺点:创建和维护索引需要时间,索引需要占用物理空间,当对表中的数据惊醒增删改时所有也需要动态维护。

二五、JVM垃圾回收实现原理。垃圾回收的线程优先级。

JVM的堆空间中主要分为年轻代、年老代和永久代。年轻代和年老代是存储动态产生的对象。永久代主要是存储java类信息,包括解析得到的方法属性、字段等等。永久代基本不参与垃圾回收。年轻代分为一个eden区和两个相同的survior区。刚开始创建的对象都放置在eden区。这样主要是为了将生命周期短的对象尽量留在年轻代中。当eden区申请不到空间时,进行minorGC,把存活的对象拷贝到survior。年老代主要存放生命周期比较长的对象,如缓存对象。具体JVM垃圾回收过程如下:

1、对象在Eden区完成内存分配。2、当Eden区满了,在创建对象就会申请不到空间,则触发minorGC,进行young(eden区和1survivor区的垃圾回收)。3、在minorGC时,Eden不能被回收的对象呗放入到空的survior(即Eden肯定被清空),另一个survivor里不能被GC回收的地想也会被放入到这个survivor,始终保证一个survivor是空的。4、当完成第三步的时候、如果发现survivor满了,则这些对象呗copy到old区,或者survivor并没有满,但有些对象已经足够old了,也被放入到old区。当old区北放满之后,进行fullGC。

二六、jvm 最大内存设置。设置的原理。结合垃圾回收讲讲。

JVM内存可以分为堆内存和非堆内存,堆内存给开发人员用的,非堆内存给JVM本身用的,用来存放类型信息,即使GC时也不会释放空间。

堆内存设置:

-Xms 初始堆内存,默认物理内存1/64,也是最小分配堆内存,当空余堆内存小于40%时,会增加到-Xms的最大限制。

-Xmx 最大堆内存分配,默认物理内存1/4,当空余堆内存大于70%时,会减小打-Xms的最小限制。

非堆内存设置:

-XX:PermSize 非堆内存的初始值,默认物理内存的1/64,也是最小非堆内存。

-XX:MaxPermSize 非堆内存最大值,默认物理内存的1/4。

查看堆大小命令为Runtime.getRuntime().maxMemory()。

二七、jvm怎样通过参数调整内存大小

本地环境变量中JVM参数设置:

new一个JAVA_OPTS:

variable name: JAVA_OPTS

variable value: -Xms256M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M

eclipse中参数设置:在缺省VM参数中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m

二八、进程与线程的区别

线程是进程的一个单元,也是进程内的可调度实体。区别就是:1、进程内的线程共享地址空间,进程则自己独立的地址空间。2、进程是资源分配和拥有的单位,同一个进程内的线程共享进程资源。3、线程是处理器调度的基本单位。4、两者均可并发执行。

二九、怎样避免死锁

1. 使用事务时,尽量缩短事务idea逻辑处理过程,及早提交或回滚事务

2. 设置死锁的超时参数为合理范围,如3-10分钟,若超过时间,自动放弃本次操作,避免进程悬挂。

3. 优化程序,检查并避免死锁现象出现。

4. 对所有的脚本和sp都要仔细测试。

5. 所有的sp都要有错误处理。

6. 一般不要修改sql事务的默认级别。不推荐强行加锁。

三十、垃圾回收算法使用的产品、场景

标记-清除算法:标记阶段,确定所有要回收的对象,并标记,清除阶段则将需要回收的对象清除。

复制算法:把内存分为大小相等的两块,每次使用其中的一块,当垃圾回收时,把存活的对象复制到另一块上,然后把这块内存整个清理掉。两块内存比是8:1

标记整理算法:把存活的对象往内存的一端移动,然后直接回收边界以外的内存。标记-整理算法提高了内存的利用率,并且它适合在收集对象存活时间较长的老年代。

分代回收算法:根据对象的存活时间把内存分为新生代和老年代,根据各代对象的存活特点,每代采用不同的GC算法。新生代用标记-复制算法,老年代用标记-整理算法。

如何配置

三一、实际项目中JVM调优

1、JVM启动参数:调整各代的内存比例和垃圾回收算法,提高吞吐量。

2、改进程序逻辑算法,提高性能

3、自定义封装线程池,解决用户响应时间长的问题。比如设置线程最小数量、最大数量

4、连接池

三二、jdk并发包的集合介绍

Map并发包,其实现为ConcurrentHashMap,它实现了ConcurrentMap接口。put方法为根据计算出的hash值去获取segment对象。找到segment对象后调用该对象的put方法完成操作。segment中的put方法则是先加锁,之后判断数组大小,然后觉得是否扩充。然后得到key索要放置的位置。

List并发包,客在高并发环境下使用CopyOnWriteArrayList代替ArrayList。添加元素是利用数组的copy功能和加锁机制。并发情况下,CopyOnWriteArrayList比ArrayList略快了些。

set并发,CopyOnWriteSet和CopyOnWriteArrayList底层实现差不多就是在添加元素时会进行唯一性判断,如果对象数组已经含有重复的元素,不进行增加处理。

queue并发,并发类是ArrayBlockingQueue,底层为数组,并对关键的方法入队、出队操作加入了锁队机制。

Atomic系列类,比如AtomicInteger类,通过使用计数器操作时,一般为了避免线程安全问题,在方法上加锁操作。有了并发包下的原子系列类,我们就可以直接使用。

三三、线程之间的通信

主要包括互斥锁、条件变量、读写锁和线程信号灯。

互斥锁:以排他方式防止数据被并发修改。互斥锁两个状态0和1。具体为申请锁、占用锁以防止数据被修改,此时默认阻塞等等,最后释放锁。

条件变量通信机制:原理,条件变量出现时,可以弥补互斥锁的缺陷,有些问题仅仅依靠互斥锁无法解决。但条件变量不能单独使用,必须配合互斥锁一起实现对资源的互斥访问。

读写锁:在对数据读写时,往往读占主要部分。基本原则是如果其他线程读数据,则允许其他线程执行读操作,但不允许写操作。如果有其他线程申请写操作,则其他线程不能申请读操作和写操作。

线程信号:线程拥有与信号相关的私有数据——线程信号掩码。线程可以向别的线程发送信号,每个线程可以设置自己的阻塞集合。所有线程中,同一信号子任何线程里的对该信号的处理一定相同。

三四、介绍threadlocal

可以叫做线程本地变量或线程本地存储。ThreadLocal为变量在每个线程中都创建了一个副本,每个线程都可以访问自己内部的副本变量。但可能这样做会导致内存占用较大。

ThreadLocal类的几个方法:get() 用来获取ThreadLocal在当前线程中保存的变量副本,set()用来设置当前线程中变量的副本,remove()用来一冲当前线程中的变量副本,initialValue()一般用来在使用时进行重写,是一个延迟加载方法。最常见的ThreadLocal使用场景是用来解决数据库连接、Session管理等。

三五、jdbc的操作过程

加载数据库驱动包、连接数据库、使用sql语句操作数据库、关闭数据库连接

三六、HTTP1.1的新特性

支持持续连接,通过建立一个TCP后,发送请求并得到响应,然后发送更多的请求并得到更多的响应。通过把简历和释放TCP连接的开销分摊到多个请求上,则对每个请求而言,优于TCP而造成的相对开销被大大降低。而且还可以发送流水线请求。

三七、异常处理,包含了什么

参考:http://lavasoft.blog.51cto.com/62575/18920/

三八、堆排序与快速排序

View Code

View Code

堆排序是渐进最优的比较排序算法,达到了O(nlgn)这一下界,而快排有一定的可能性会产生最坏划分,时间复杂度可能为O(n^2)。堆排比较的几乎都不是相邻元素,对cache极不友好。数学复杂度并不一定代表实际运行的复杂度。

三九、Collection有哪些类

Set, List, Map, SortedSet, SortedMap, HashSet, TreeSet, ArrayList, LinkedList, Vector, Collections, Arrays, AbstractCollection

四十、Hashcode总为1会怎样,如何解决hash冲突

当所有对象Hashcode返回都为1时,所有对象都出现hash冲突,其性能会下降

解决hash冲突:

线性再散列法、插入元素时,如果发生冲突,算法会简单的遍历hash表,直到找到表中的下一个空槽,并将该元素放入该槽中。查找元素时,首先散列值所指向的槽,如果没有找到匹配,则继续遍历hash表,直到:(1)找到相应的元素;(2)找到一个空槽(指示查找的元素不存在);(3)整个hash表遍历完毕(指示该元素不存在并且hash表是满的)。

非线性再散列法、线性再散列法是从冲突位置开始,采用一个步长以顺序方式遍历hash表,来查找一个可用的槽,从上面的讨论可以看出,它容易产生聚集现象。非线性再散列法可以避免遍历散列表,它会计算一个新的hash值,并通过它跳转到表中一个完全不同的部分。

外部拉链法、将hash表看作是一个链表数组,表中的每个槽要不为空,要不指向hash到该槽的表项的链表。

四一、如何用两个队列实现栈

即可以将A队列作为栈push,B队列作为栈pop。量队列数据相同。

四二、Object的通用方法

通用方法有equals(), finalize(), toString(), 其他native方法有hashcode(), registerNatives(), getClass(), clone(), notify(), notifyAll(), wait()等。

四三、Java中如何实现多态

多态是OOP中的一个重要特性,主要用来实现动态联编,程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。有利于提高大型系统的灵活性和扩展性。

多态的三个必要条件:有继承、有方法重写、父类引用指向子类对象。

引用变量的两种类型:编译时类型由申明类型决定,运行时类型由实际对应的对象决定。

View Code

View Code

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

对于面试,一定要有良好的心态,这位小伙伴面试美团的时候没有被前面阿里的面试影响到,发挥也很正常,也就能顺利拿下美团的offer。
小编还整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家,

在这里插入图片描述

在这里插入图片描述

最后感谢大家的支持,希望小编整理的资料能够帮助到大家!也祝愿大家都能够升职加薪!

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

-1712190978297)]

最后感谢大家的支持,希望小编整理的资料能够帮助到大家!也祝愿大家都能够升职加薪!

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/794944
推荐阅读
相关标签
  

闽ICP备14008679号