面试

“科班出身”的程序员和“培训出身”的程序员的大型辩论(甩锅)现场

左心房为你撑大大i 提交于 2021-02-10 13:25:42
每天早上七点三十,准时推送干货 前几天阿粉说阿粉最近换了公司,而且入职之后干掉了公司里面的测试数据库的事情,而接下来的事就比较有意思了,来自“科班出身”的哥们和来自“培训出身”的我的大型辩论(SIBI)现场,也不能说是通俗的甩锅,但是确实有那么点意味。 现场一 “科班程序员”:这功能很好实现呀,直接写几个嵌套for循环,在里面判断一下就行了,直接返回数据就行了,为啥你这写的这么墨迹呢? “培训程序员”:内心OS:嵌套for?再加上几个if,你确定你的数据超过1w条,没有明显的延迟么?于是,只能告诉他,兄弟,这么写肯定是没什么问题,但是你不想一下后期怎么维护么?你这才一两万的数据我都能感觉出明显的延迟了,为啥不能优化一下呢? 说实话,说到这个问题的时候,也避免不了被大家diss,觉得这不是科班出身的程序员能写出来的代码,而事实情况确实是这个样子的,也可能是工作经验不太足,所以很多代码写的不是很给力,也可能是之前的公司做过几次 CodeReview,所以每次在写完代码之后都习惯性的去考虑一下这个代码还能不能优化的更加简单一点,所以考虑的时间要稍微长一点。 于是,兄弟就开始和我较真了,阿粉的策略一直很简单,兄弟,你自己写个三个for循环,然后去看看你执行完这个循环的时间,然后想想如果在循环中加入查询数据库的所有的操作,你再想想怎么处理,就比如说

什么是redis的缓存雪崩与缓存穿透

一曲冷凌霜 提交于 2021-02-10 13:20:40
今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题? 一、缓存雪崩 1.1 什么是缓存雪崩? 首先我们先来回答一下我们为什么要用缓存(Redis): 1、提高性能能:缓存查询是纯内存访问,而硬盘是磁盘访问,因此缓存查询速度比数据库查询速度快 2、提高并发能力:缓存分组了部分请求,支持更高的并发 现在有个问题, 如果我们的缓存挂掉了,这意味着我们的全部请求都跑去数据库了 。 我们都知道Redis不可能把所有的数据都缓存起来( 内存昂贵且有限 ),所以Redis需要对数据设置过期时间,将已经过期的键值对删除,它采用的是惰性删除+定期删除两种策略对过期键删除。 如果缓存数据 设置的过期时间是相同 的,并且Redis恰好将这部分数据全部删光了。这就会导致在这段时间内,这些缓存 同时失效 ,全部请求到数据库中。 这就是缓存雪崩 : Redis挂掉了,请求全部走数据库。 对缓存数据设置相同的过期时间,导致某段时间内缓存失效,请求全部走数据库。 缓存雪崩如果发生了,很可能就把我们的数据库 搞垮 ,导致整个服务瘫痪! 1.2 如何解决缓存雪崩? 对于“对缓存数据设置相同的过期时间,导致某段时间内缓存失效,请求全部走数据库。”这种情况,非常好解决: 解决方法:在缓存的时候给过期时间加上一个 随机值 ,这样就会大幅度的

Java开发面试题,3年工作经验的Java程序员面试经

无人久伴 提交于 2021-02-09 20:31:43
一、Java基础部分 1、使用length属性获取数组长度,public、private、protected、friendly区别 2、Collection和Collections区别 3、String s=new String(‘xyz’);创建了几个object对象 4、short s1; s1=s1+1;是否有错? 5、Overriding和Overloading区别 6、Set里面的元素不能重复,用什么方法区分重复与否。 7、给出一个常见的runtime exception。 8、error和exception区别。 9、List和Set是否继承自Collection接口。 10、abstract class和interface 的区别。 11、是否可以继承String类。 12、try{}里有一个return语句,紧跟在try后的finally里的code会不会被执行,什么时候执行,return前执行还是return后执行。 13、最有效率的方法算2*8等于几 14、两个对象值相同,x.equal(y)==true,但是却可有不同的hashcode,这句话对不对。 15、值传递和引用传递 16、switch是否作用在byte、long、string上。 17、ArrayList和Vector区别,HashMap和Hashtable区别(了解这几个类的底层jdk中的编码方式

这个神器,拯救了千千万万的苦逼程序员!

邮差的信 提交于 2021-02-09 20:12:26
多线程编程的理论 ↓↓↓ 多线程编程的现实 ↓↓↓ (无声视频) 看到这,你什么心情?………此时此刻心情”好烦烦“! 今天给小伙伴们出几道阿里必问的面试题,测测你能完美的回答几道呢? 有没有一种一定能保证线程安全的代码写法?(偷偷告诉你,真的有!) 多个线程如何保持A1B2C3等顺序交替输出? synchronized volatile的CPU原语是如何实现的? 无锁、偏向锁、轻量级锁、重量级锁有什么差别? 如何正确的启动和停止一个线程? 线程和纤程的区别的是什么?为什么纤程比较轻量级? ThreadLocal有没有内存泄漏的问题?为什么? 下 列三种业务,应该如何使用线程池: 高并发、任务执行时间短 并发不高、任务执行时间长 并发高、业务执行时间长 网上搜罗一堆答案,各式各样,唉!!! 如果你平时只有CRUD的经验,不了解 多线程与高并发 ,面对这样面试题,大概率一头雾水。 如果你真是这样,建议要拿出 2 个小时的时间,参加一次马士兵老师亲授的 《多线程与高并发》 训练营, 限时福利,本次免费学习... 诶 , 马士兵是谁? 99年清华毕业,从程序员干到CTO,一直致力于推动Java、大数据、AI生根中国,其高并发直播课程广受欢迎,有千万次播放学习。 马士兵 让骨灰级扫地神僧 马士兵老师 带你将多线程的知识系统化,帮助你理解多线程在 CPU层级的实现

2020 年只剩最后一个月……

风流意气都作罢 提交于 2021-02-09 20:08:13
关注我 们, 设为星标,每天7:30不见不散,架构路上与您共享 2020 年最后一个月了!2020 年已经进入倒计时,此刻,要感谢这一年努力的自己。 2020 年其实是比较特殊的一年,回看这一年全国全世界的经历都是以往年份的几倍考验或几十倍的考验,对于我们个人来说又何尝不是极大的考验。 今天这篇文章就是想跟大家分享我一个好朋友这一年的真实经历,就在前两个月他已经是某大厂的高级 Java 工程师了。 “忙过了 「双十一」 ,又开始了 「双十二」 ,接下来还有 「双旦」…… ”,虽然他经常跟朋友吐槽自己996,甚至经常 007,但内心却是开心和满足的,因为每次给他父母打电话说自己在这家公司和拿到多少多少工资的时候,他父母是自豪的。 一开始他不在大厂,也总酸我们那些 996 的朋友,你们这哪还有生活啊,难怪没有女朋友。其实他内心是羡慕嫉妒的,他说他也想进大厂, 大厂意味着高薪,趁年轻就应该享受这样的「福报」。 他今年也 30 了,普通本科生,而立之年的他过得不是很顺利,上半年不到 3 个月他经历了两次离职…… 第一次是 年初 自己待 了 好几年的公司赶上了疫情,组织 架构调整, 进行了 人员 优化,业务线 被解散, 被裁员 。 第二次是 被裁员后 ,草草地面试,进入了一家外包公司 。 进去之后, 感受非常不好, 感觉跟公司正式员工有着明显的差别,不光薪资待遇 方 面

10w行级别数据的Excel导入优化记录

为君一笑 提交于 2021-02-09 20:06:34
作者:后青春期的Keats www.cnblogs.com/keatsCoder/p/13217561.html 需求说明 项目中有一个 Excel 导入的需求:缴费记录导入 由实施 / 用户 将别的系统的数据填入我们系统中的 Excel 模板,应用将文件内容读取、校对、转换之后产生欠费数据、票据、票据详情并存储到数据库中。 在我接手之前可能由于之前导入的数据量并不多没有对效率有过高的追求。但是到了 4.0 版本,我预估导入时Excel 行数会是 10w+ 级别,而往数据库插入的数据量是大于 3n 的,也就是说 10w 行的 Excel,则至少向数据库插入 30w 行数据。 因此优化原来的导入代码是势在必行的。我逐步分析和优化了导入的代码,使之在百秒内完成(最终性能瓶颈在数据库的处理速度上,测试服务器 4g 内存不仅放了数据库,还放了很多微服务应用。处理能力不太行)。具体的过程如下,每一步都有列出影响性能的问题和解决的办法。 导入 Excel 的需求在系统中还是很常见的,我的优化办法可能不是最优的,欢迎读者在评论区留言交流提供更优的思路 一些细节 数据导入: 导入使用的模板由系统提供,格式是 xlsx (支持 65535+行数据) ,用户按照表头在对应列写入相应的数据 数据校验: 数据校验有两种: 字段长度、字段正则表达式校验等,内存内校验不存在外部数据交互。对性能影响较小

基础送分题,why哥只说这一次。

廉价感情. 提交于 2021-02-09 19:05:16
这是why哥的第 87 篇原创文章 你看上面的便签截图,这是一篇一年前就想写的文章,但是后面我觉得这个东西有点太简单了,写着没啥意思。 但是回想这几次面试的场景,也有少数的候选者没有回答上来。 场景基本上是这样的: 面试官:我看你简历上写了熟悉 Java 基础,可以选哪一块,我们聊一下吗? 面试者:可以的,在平时的工作中集合类用的很多,比较熟悉。(内心OS:快,快问我,HashMap,我什么都知道。) 面试官:好的,那么 ArrayList 是线程安全的吗?(内心OS:别想套路我问你 HashMap,我也背过。) 面试者:ArrayList 不是线程安全的,HashMap 也不是线程安全的。(内心OS:快,快问我,HashMap,我什么都知道) 面试官:那么 ArrayList 的线程不安全体现在什么地方呢?有什么样的表现呢?(内心OS:好家伙,开始明示了,反正我就是不问 HashMap。) 面试者:额...就是,那啥...多线程的时候...会线程不安全。好吧,记不太清楚了。 就觉得很奇怪。 倒不是质疑面试者的能力,至少知道它是线程不安全的。 你能说他的回答有毛病吗? 没毛病呀。 只是不知道为什么不安全而已。 知其然,能用,很好。 知其所以然,放心的用,更好。 我奇怪的是,这不也是标准的面试八股文吗? 我记得我几年前刚毕业,面试的时候就背过这题啊。 HashMap 背的滚瓜烂熟,连

灵魂一问:为什么对gRPC做负载均衡会很棘手?

六月ゝ 毕业季﹏ 提交于 2021-02-09 15:52:56
在过去的几年中,随着微服务的增长,gRPC在这些较小的服务之间的相互通信中获得了很大的普及,在后台,gRPC使用http/2在同一连接和双工流中复用许多请求。 使用具有结构化数据的快速,轻便的二进制协议作为服务之间的通信介质确实很有吸引力,但是使用gRPC时需要考虑一些因素,最重要的是如何处理负载均衡。 gRPC使用粘性连接 gRPC连接是粘性的。这意味着当从客户端到服务器建立连接时,相同的连接将被尽可能长时间地用于许多请求(多路复用)。这样做是为了避免所有最初的时间和资源花费在TCP握手上。因此,当客户端获取与服务器实例的连接时,它将保持连接。 现在,当同一客户端开始发送大量请求时,它们都将转到同一服务器实例。而这正是问题所在,将没有机会将负载分配给其他实例。他们都去同一个实例。 这就是为什么粘性连接会使负载平衡变得非常困难。 以下是一些负载均衡gRPC相互通信的方法,以及每种方法的一些细节。 1.服务器端 当在服务器端完成负载均衡时,会使客户端非常精简,并且完全不知道如何在服务器上处理负载: 网络负载均衡器 网络负载均衡器在OSI (Open Systems Interconnection) 模型的第4层运行。因此,它非常快,可以处理更多的连接。当出现新的TCP通信连接时,负载均衡器将选择一个实例,并且在连接有效期内将连接路由到该单个实例。 现在请记住

百度算法提前批 面试复盘

浪尽此生 提交于 2021-02-09 15:35:18
作者 | liu_sy 来源 | 见文末『阅读原文』处 整理 | NewBeeNLP公众号 面试锦囊之面经分享系列,持续更新中 欢迎后台回复" 面试 "加入讨论组交流噢 文末也有内推,需要的同学自取哈 写在前面 之前通过非定向内推提前批,简历一直处于筛选状态中,然后大概在8.18在牛客看到一个前辈所在部门(推荐搜索)招人,就把简历发给了前辈,然后隔了两三天就通知了面试。 一面 (8.21 46分钟) 自我介绍 在广告算法比赛中,是如何构建特征的,以及如何识别哪些特征是重要的 word2vector 原理 lstm中的attention是怎么操作的 梯度消失及解决方法 BN的作用 手撕代码:链表相加(leetcode第二题)。需要注意的是最好提前练习如何写链表的示例,因为我们刷题只用写个函数 二面(8.24 60分钟左右) 自我介绍 提问项目和广告比赛,问了一些深度学习基础和机器学习基础 神经网络初始化方法。我回答了随机初始化和He初始化。面试官问我随机初始化有什么问题,He初始化解决了什么问题 BN的原理和作用。这里我的回答面试官提出了很多很多疑问,因为网上关于BN的解释也是说法不一,比如说一种常见说法是BN解决了 Internal Covariate Shift,但是他用sigmoid举例,那现在基本都用relu,relu大于0的时候,梯度都为1,也有这种问题吗

Java集合:ArrayList (JDK1.8 源码解读)

允我心安 提交于 2021-02-09 15:32:08
ArrayList ArrayList几乎是每个java开发者最常用也是最熟悉的集合,看到ArrayList这个名字就知道,它必然是以 数组方式实现 的集合 关注点 说一下ArrayList的几个特点,也是面试喜欢问的几个点: 1.是否允许为空:是 2.是否允许重复数据:是 3.是否有序:是 4.是否线程安全:否 主要声明 看一下ArrayList的声明: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable ArrayList继承自AbstractList,并且实现了List接口(还实现了RandomAccess、Cloneable、Serializable),List接口又继承自顶层集合接口Cellection,实现了List接口就代表它是一个 有序的 集合 再看一下ArrayList声明的主要变量: // 默认容量 private static final int DEFAULT_CAPACITY = 10 ; // 一个空的数组 private static final Object[] EMPTY_ELEMENTDATA = {}; // 默认容量的空数组,搞这么多空数组干嘛?|_・)