唐宋丶 - 技术栈 面试题
type: channel
link: http://www.tangsong.fun/index.php/category/S-Q/
description: 技术栈：后端 Java 架构师技术栈汇总 面试题：刷过的面试题、算法题及解析
items: [面试题]4399公司2021Java开发工程师（卷一）
items: [面试题]4399公司2017秋招开发工程师笔试题
items: [面试题]Java就业面试题大全
items: [面试题]阿里巴巴2017秋招研发工程师笔试题
items: [技术栈]WEB前端技术栈
items: [面试题]Java面试宝典Beta5.0
items: [面试题]DT就业面试笔记
items: [技术栈]Java后端架构师知识体系

[面试题]4399公司2021Java开发工程师（卷一）
type: item
date: 2020-09-24T08:50:00+08:00
description: 4399公司2021Java开发工程师（卷一）总体来说难度不大，偏向基础。但是由于基本没有准备，SpringBoot和文件编程不尽人意。[...]

[面试题]4399公司2017秋招开发工程师笔试题
type: item
date: 2020-09-22T16:55:00+08:00
description: 1.灰度等级为256级，分辨率为1024*1024的显示器，至少需要的帧缓存容量为（1MB）灰度 = 256 = 2^8 ，因此需要8比特表示缓存 = 8bit * 1k * 1k = 8Mbit = 8MB2.设一组初始记录关键字序列为(65,56,72,99,86,25,34,66)，则以第一个关键字65为基准而得到的一趟快速排序结果是（34，56，25，65，86，99，72，66）八大排序基本笔试面试必考3.在下列几种排序方法中，空间复杂度最高的是（归并排序）归并排序O(N)快速排序：就地快排O(1)使用递归： 每一次都平分数组，即最优情况是O（logn）退化为冒泡排序，即最差情况是O（n）直接插入、希尔、简单选择、堆排、冒泡都是O(1)基数排序为O(N+R)4.下面哪些可能是重载的基本条件（参数的类型不同、参数的顺序不同、参数的个数不同）（注意：是可能为重载的基本条件）这题强调了可能，因为参数顺序可能是 method(int a,int b)，也可能是指 method(double a,int b)5.为了保证连接的可靠建立，TCP通常采用（三次握手）三次握手，四次挥手。6.下列有关计算机网络叙述正确的是（ABC）A.建立计算机网络的最主要的目的是实现资源共享B.计算机网络是在通信协议控制下实现的计算机互联C.利用Internet网可以使用远程的超级计算机中心的计算机资源D.TCP/IP的网络接口层对应的OSI的物理层7.小明的游戏账号密码是一串8位数字，只记前面5个数字为38034.但他肯定，后面3个数字全是奇数，最后一个数字是5，且后3个数字中相邻数字不相同，小明至少要试多少次才能保证登入（16）3 8 0 3 4 _(奇-后=5) _(1.3.7.9) 54*4=168.五个球从盒子里拿出来，打乱顺序放回去，均不在原位的排列数是多少（44）4 * ( 2 + 3 * 3 ) = 44错排公式：D(n) = (n-1) * ( D(n-1) + D(n-2) )，n >= 3，D(1) = 0 , D(2) = 1+[xA][][][][]把A放到其它位置有4种情况，这里设A在B位。[B][A][xC][xD][xE]若把B放在A位，则变成D(n-2)种情况的错排 [xB][A][xC][xD][xE]若不把B放在A位，因为有这个前提所以B相当于为A的错排，则变成D(n-1)种情况的错排9.数据在计算机内有链式和顺序两种存储方式，在存储空间使用的灵活性上，链式存储比顺序存储要（高）链式存储快，查找慢；顺序查找快，存储慢。10.入栈序列是：a1,a3,a5,a2,a4,a6,出栈序列是：a5,a4,a2,a6,a3,a1，则栈的容量最小是（4）画图即可11.对某二叉树进行先序遍历的结果是ABDEFC,中序遍历的结果是DBFEAC，则后序遍历的结果是（DFEBCA）先序：根→左→右中序：左→根→右后序：左→右→根思路：通过先序的根1确定中序对应的位置，就可以知道根1前面的所有左子树，再递归下去。12.对于有n个结点的二叉树，其高度为（不确定）(第一层高度1)题目说的是二叉树，若为完全二叉树为[log2N]+1；若每层一个节点则高度为N。13.设输入序列为1,2,3，则经过栈的作用后可以得到（5）中不同的输出序列。卡特兰数：f(3) = C36 / 3+1 = ((654)/(321)) / 4 = 20 / 4 = 514.一棵完全二叉树第六层有9个叶结点（根为第一层），则结点个数最多有（109）1 + 2 + 4 + 8 + 16 + 32 + 2*(32-9) = 63 + 46 = 10915.i为整型变量，则以下循环语句的循环次数是（0）for(i=2;i<2;) printf(“%d”,i--);16.64位系统上，定义的变量int* a3占据（48）字节3 2 8字节 = 48字节17.当一进程运行时，系统可基于某种原则，强行将其擞下，把处理器分配给其他进程，这种调度方式是（剥夺方式）优先权原则、短进程优先原则、时间片原则，采用直接剥夺的调度方式。18.i的初值为0，i++在两个进程里面分别执行100次，能得到可能的值包括（0-200）多线程下，i++不是原子性操作，所以可能脏读。19.在操作系统中同时存在多个进程，它们（可以共享允许共享的系统资源 可以调用同一段程序代码）20.【4399论述题】大学期间除了课程作业外做了哪些开发？用的什么语言？目的是什么？图书管理系统，javaweb爬虫，java车辆预约系统，java易网，python...尽量写简历上的项目，最好是比赛的。21.【4399论述题】周围朋友一般因为你的什么特质而佩服你？变相展示自己的出众点：每天保持学习，能持之以恒去图书馆学习。有明确的…

[面试题]Java就业面试题大全
type: item
date: 2020-06-01T22:36:00+08:00
description: 这一份是比较早的面试题，比较基础也比较在流传。趁六月份开个新帖，每日更新至少一道面试笔试题。[...]

[面试题]阿里巴巴2017秋招研发工程师笔试题
type: item
date: 2020-04-19T21:18:00+08:00
description: 1.有个特殊的餐厅，对客人的要求是如果要离开餐厅一定要看下餐厅内有没有比你迟进来的人，一定要所有比你迟进来的人离开后你才能离开，有一天甲，乙，丙，丁四个客人先后进入了这家餐厅，那么他们离开的顺序不可能是：EA: 丙，乙，甲，丁 B: 甲，乙，丙，丁 C: 乙，甲，丙，丁 D: 乙，丙，甲，丁 E: 丁，丙，甲，乙 F: 丁，丙，乙，甲考点： 堆栈误区： 甲乙丙丁不一定一次性全部进入餐厅，一般错在丁第一个出现，说明甲乙丙丁全部一次性入栈2.在关系型是数据库中，有两个不同的事务同时操作数据库中同一表的同一行，不会引起冲突的是：FA: 其中一个DELETE操作，一个是SELECT操作 B: 其中两个都是UPDATE C: 其中一个是SELECT，一个是UPDATE D: 其中一个SELECT E: 其中一个是DELETE，另一个是UPDATE F: 两个都是DELETE思路： 只要不产生“脏数据”，就是正确的。同理都是SELECT也不会冲突。3.众所周知我们所处的宇宙的质能公式是E=mc^2 ，其中c是真空中的光速。和我们的宇宙平行的另一个宇宙meta，研究显示他们使用的质能公式是E=(2+ √3)^m，当一个物体的质量很大的时候，对应的能量E非常大，数据也非常的长。但meta宇宙里面的智慧生物非常的懒，他们只愿意把E取整，然后记录对应的能量E的最后一位整数，比如m=0时，他们会记录1，m=1时，他们会记录3，m=2时，他们会记录3.现在请问当m=80时，他们会记录多少？3思路： 计算3.73的0、1、2、3次方，就能找到规律1，3，34.页高速缓存是Linux kerne使用的主要的磁盘缓存技术。它允许系统把存放在磁盘上的一些数据保留在内存中，以便减少对磁盘的访问。进程对页高速缓存区中的数据修改之后，数据页被标记为“脏数据”在下列哪些条件下，脏数据不会被写入磁盘？B、FA: 页高速缓存空间不足 B: 突然断电 C: 变脏以来，太久没有过更新 D: 通过系统调用（sync（），fsync（），fdataasync（））来强 E: 行对将对快设备的更新同步到磁盘 F: 内存足够大 G: 磁盘足够大考点： 缓存->磁盘。 ACD是脏数据写入磁盘的条件。5.设一组初始关键字记录关键字为（ 12,15,1,18,2,35,30,11 ），则以 12 为基准记录的一趟快速排序结束后的结果为挖坑法： 11，2，1，12，18，35，30，15左右指针法：2，11，1，12，18，35，30，15(左右先后顺序影响答案)前后指针法：1，2，11，18，15，35，30，126.多项式 P(X)=a+bx+cx^2+dx^3 ，对于任意 x ，计算 P(X) 中最少需要用到乘法操作的次数是多少？3思路： a+bx+cx^2+dx^3=a+x(b+x(c+xd))7.有一个班31人，女同学15人，男同学16人，现在要玩一个结组游戏，每组由男女两名同学构成，每个同学最多只能在一个组。结组的同学可以到老师那里领100元钱，然后按照预先分配的协议进行分配，钱最小可分单元为1元。未能结组的同学无法领到钱，不允许在组之间传递利益。那么一下命题正确的是：男生和女生可以得到一样多的钱误区： 公平则男女15各50R，一个男0R；博弈则为15个女生99R,15个男生1R，一个男生0R8.现代的企业是建立在大规模协作的基础上的，员工之间，团队之间，部门之间，企业之间的协作都是成功的重要因素。好的企业在协作上是高效的。以下说法中不合适的是（B）A: 一个项目能容纳的人员是有限的，当增加到一定规模项目进度反而会变慢。 B: 一个项目协作为了办证信息对称，多方参与的情况下直接召集多方在一起开会就能协调好 C: 协作建立的条件包括互补和共赢 D: 能力结构类似的成员之间较多样互补型员工之间更容易产生竞争关系 E: 协作中的权利和责任应当相称 F: 如果有可能的话，信息交互较多的事务更合适在一个团队内或有一个人完成，相较于进行分工。9.以下程序的运行结果是？A考点： 线程的run()和start()思路： start()启动线程，这时无需等待run方法体代码执行完毕，可以直接继续执行下面的代码；run()直接调用则当作普通方法，这时要等待run方法体执行完毕后，才可继续执行下面的代码10.输入图片大小为200×200，依次经过一层卷积（kernel size 5×5，padding 1，stride 2），pooling（kernel size 3×3，padding 0，stride 1），又一层卷积（kernel size3×3，padding 1，stride 1）之后，输出特征图大小为：97思路：卷积向下取整，池化向上取整输出尺寸=(输入尺寸-kernel尺寸+2*pad…

[技术栈]WEB前端技术栈
type: item
date: 2020-10-28T17:35:00+08:00
description: Node.js、NPM、WebPackage、ES6、Swagger、Mock.js/EasyMock、Nuxt.js、Axios、Share.js、正则表达式[...]

[面试题]Java面试宝典Beta5.0
type: item
date: 2020-09-22T09:49:00+08:00
description: java面向对象：Clone专题1.1 为什么要clone？在实际编程过程中，我们常常要遇到这种情况：有一个对象 A，在某一时刻 A 中已经包含了一些有效值，此时可能会需要一个和 A 完全相同新对象 B，并且此后对 B 任何改动都不会影响到 A 中的值，也就是说，A 与 B 是两个独立的对象，但 B 的初始值是由 A 对象确定的。在 Java 语言中，用简单的赋值语句是不能满足这种需求的。要满足这种需求虽然有很多途径，但实现 clone（）方法是其中最简单，也是最高效的手段。1.2 new 一个对象的过程和 clone 一个对象的过程区别new 操作符的本意是分配内存。程序执行到 new 操作符时，首先去看 new 操作符后面的类型，因为知道了类型，才能知道要分配多大的内存空间。分配完内存之后，再调用构造函数，填充对象的各个域，这一步叫做对象的初始化，构造方法返回后，一个对象创建完毕，可以把他的引用（地址）发布到外部，在外部就可以使用这个引用操纵这个对象。new会调用构造方法，clone不会。clone 在第一步是和 new 相似的，都是分配内存，调用 clone 方法时，分配的内存和原对象（即调用 clone 方法的对象）相同，然后再使用原对象中对应的各个域，填充新对象的域，填充完成之后，clone 方法返回，一个新的相同的对象被创建，同样可以把这个新对象的引用发布到外部。1.3 写clone()方法时，通常都有一行代码，是什么？clone 有缺省行为，super.clone();因为首先要把父类中的成员复制到位，然后才是复制自己的成员。补充说明clone默认方法为浅拷贝，即：新（拷贝产生）、旧（元对象）对象不同，但是内部如果有引用类型的变量，新、旧对象引用的都是同一引用。深拷贝则是全部拷贝原对象的内容，包括内存的引用类型也进行拷贝。（一般用于有父子类关系）package clone; /** * @author CTX */ public class Father implements Cloneable{ private Son son; public Father(Son son){ this.son = son; } @Override protected Object clone() throws CloneNotSupportedException { // return super.clone(); Father newFather = (Father) super.clone(); newFather.son = (Son) this.son.clone(); return newFather; } public Son getSon() { return son; } }package clone; /** * @author CTX */ public class Son implements Cloneable{ @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } }package clone; /** * @author CTX */ public class Test { public static void main(String[] args) throws CloneNotSupportedException { Father father1 = new Father(new Son()); Father father2 = (Father) father1.clone(); System.out.println("f1:"+father1.hashCode()+" s1:"+father1.getSon().hashCode()); System.out.println("f2:"+father2.hashCode()+" s2:"+father2.getSon().hashCode()); } } f1:460141958 s1:1163157884 f2:1956725890 s2:356573597JavaSE语法2.1 当一个对象被当做参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递？是值传递。Java编程语言中只有由值传递参数的。当一个对象实例作为一个参数被传递到方法中时，参数的值就是该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不会改变的。注意：在 Java应用程序中永远不会传递对象，而只传递对象引用。但Java应用程序按引用传递对象这一事实并不意味着 Java 应用…

[面试题]DT就业面试笔记
type: item
date: 2020-09-14T16:38:00+08:00
description: 技术面试指导一、必备项0.自我介绍表达流畅、不要太差即可。可以提前准备一份说辞，外企需要准备英文的自我介绍。1.基础坑1：【答案很标准】面试时的回答，一定不要背网上的《面试大全》/《面试宝典》，一定要有自己的思想。这些答案太过千篇一律、标准。而且太老的面试题可能存在错误或者过时。建议：每道题都通过自己的理解或者代码敲一遍，能够用自己话说出来，最好加上自己的一些理解（哪怕有点瑕疵）。或者搬运一些博客/GitHub上大牛的博文。不要死记那些所谓的标准答案（那些答案往往很浅）。总之，就是要向面试官传达“我的答案是我自己写的，我是一个有独立思考的人，而不是网上抄的”。2.技术列表坑2：【精通】3年以内的开发者，几乎没人敢说“精通”哪一门技术建议：掌握程度：掌握、熟练、理解、会使用坑3：【个人掌握的技能过于“标准化”，明显就是培训、或者看某套视频学出来。如：java + 数据库 + web前端 + jsp/servlet + ssm + boot/cloud】建议：一般而言，自学成才的人比培训出来的学生 更具有独立思考的能力，因此在相同的条件下，企业更喜欢没有参加过培训的学生。建议写上2-3门非培训机构标配课程，如service mesh、netty等（最好写与高并发、分布式有关的，技术的名字相对“少见”但又很重要的）。对面试而言，这些“少见”的技术，只要你写上了，并且能把其中任意一个核心知识点说明白，就已经非常加分了。（假设Spring是一个“少见”的技术，那么你只要在面试时解释一下什么是IoC就可以了）坑4：【简历上写一大堆牛B的技术，显得自己很厉害】建议：技术点宁可少写，也别多写。面试官经常都很忙，没时间精心准备对你的面试，甚至有时候是一边神游一边在提问，所以很可能从你简历里随便挑几个你写上的技术来问你。因此简历上写到的技术，都很可能被问到。所以写上去的所有技术都要事先做好面试官提问的准备，对于非主流的技术，面试官一般会让你自己介绍使用场景和方法，可以事先做好准备。3.项目坑4：【项目名叫“xxx电商项目”、“xxx管理系统”，这些“项目”简直就是培训机构的标配，缺乏真实项目的感觉】但对于实习生来说，这个坑真的是痛点。因为除此和课设的“xxx管理系统”之外，很难接手到其他新的项目。大创之类的也不一定刚好是所学语言为主。建议：针对实习生来说，可以学一学Java爬虫，做完后开源出来。提前准备好回答“项目”的剧本 “你做过什么样的项目？”或者根据你简历中的项目来提问，几乎是技术面试官必须做、并且非常喜欢做的事。所以，如果你没有充足的项目经验，就提前准备好台词吧。（用到的技术、使用场景、遇到的困难、如何解决）关于项目，经常会被问到的点是：某个技术本身的不足，以及如何弥补。因为这样问，能够检验你是否真的做过这个“项目”，至少能说明你是否深入思考过。举例如下：你项目中用到了MySQL ：如果数据超过的MySQL的容量怎么处理？（弥补MySQL自身的不足）你做的这个项目是高并发吧？缓存用了吗？在哪些场景 你见过缓存失效？怎么解决？（还是在问你缓存自身的问题如何解决）看你的项目用到了MQ？MQ可以用来解耦合，具体讲讲你项目中到底哪些场景用到了解耦合？（在考你的项目是真的，还是假的）项目的重难点 每个项目都有自己的重难点，这些重难点也就是必问点，举例如下分布式项目：如何共享数据？什么是CAP原则？分布式锁、分布式事务、分布式缓存怎么实现？高并发项目：几级缓存，如何限流，如何熔断，用docker了没？真实性：实际的使用场景简历上写的“用到了人脸识别技术” ：哪些场景用到了？人脸识别是自己公司写的，还是调用的三方API？自己写的话，用的什么算法？调用API的话，每次调用需要付费多少钱？识别时的光线强度有什么要求？多线程、设计模式、算法：用来处理什么业务？场景？大数据的项目：数据从哪来的？项目能否访问？描述方式：技术列表 + 文字 （如果绘图功底不错，可以加上架构图）项目周期：半年以上。在校生的话就写2、3个月的项目周期。 简历上的项目个数：三个及以内（毕业三年内，写1-2个就够了）4.表达沟通能力不用刻意表现，表达清楚就行。问到不会的不甩锅，不抱怨，诚恳听取认真改正，体现自己的素养。二、加分项1.高并发/分布式/调优多线程（juc、aqs、线程安全、锁机制、生产消费者、线程依赖问题）数据处理SQL优化 ， 常见高性能数据库架构（如mysql+mycat+haproxy+keepalived）JVM调优2.实际的解决问题能力这点需要自己在面试时主动将话题引入。例如在回答项目时，主动说一下你在做项目时遇到过什么问题。具体是如何发现、排查、分析、解决问题的。3.绝杀ACM竞赛、蓝桥杯等全国性竞赛（学生专享）有过书籍、论文等出版物在github发布过项目(st…

[技术栈]Java后端架构师知识体系
type: item
date: 2020-02-14T12:46:00+08:00
description: Java 大后端各种架构图汇总、Java后端架构师知识体系、Java核心技术知识体系、[...]