面试

如何系统地进行前端性能优化【监控篇】

社会主义新天地 提交于 2020-12-02 19:02:44
性能优化是前端领域一个亘古不变的热点话题。本系列文章将分监控、加载性能优化和运行时性能优化三章从实践角度来做具体分享 想要优化就必须得有度量。有了监控才能客观、系统地进行分析性能瓶颈、验证优化结果等。所以我们先从如何完整地监控开始 优化方法论 前端性能又分为加载性能和运行时性能 加载性能度量 加载性能就是用户从进入到页面到页面真正可用的这个过程的耗时。我们可以用一道经典的面试题入手:用户从键入url按下回车之后到看到页面这其中发生了什么? DNS解析:把域名解析成ip地址 TCP连接建立 发送http请求 服务器解析http请求并返回结果 浏览器解析返回结果 而我们要做的就是记录这些过程的耗时: 现代浏览器提供了 performance 对像供我们方便地提取这些数据。而且 兼容性 在这。其中 timing 对象详细记录每个节点的时间戳。 将相关时间节点相减就能得到相应过程的耗时。 作为开发,我们通常更关注从服务器读取的时间,所以取 fetchStart 为起点。 下面是一些常用的时间计算: const { fetchStart, domainLookupStart, domainLookupEnd, domInteractive, domContentLoadedEventStart } = performance.timing // DNS查找时间 domainLookupEnd

笔试面试题目:对称树的判断

时光总嘲笑我的痴心妄想 提交于 2020-12-02 16:43:01
原文发表于: 周六,被外面的施工给吵醒了,以往没这种情况啊,不知道他们在干啥。今天,我们来聊一下对称树的判断。 这些年来,我不断地忽悠朋友们去BATH, 促进人才流动,自己也能顺便获取一些好处。 S哥便是我忽悠的目标之一,S哥是某985土木工程专业出身,后来转行做了程序员,去T公司面试,碰到这样一道题目(一看就是leetcode中的easy级别问题): 我们来分析一下这个问题,如下图所示,假定root的左子树和右子树都存在,那么root树对称的充分必要条件是:root.Left和root.Right是两棵彼此对称的树。 如何判断root.Left和root.Right是两棵彼此对称的树呢?必须且只需满足如下三个条件: a. root.Left.Val = root.Right.Val, 即上图中的3. b. root.Left的左子树和root.Right的右子树彼此对称,即上图中的2, -1. c. root.Left的右子树和root.Right的左子树彼此对称,即上图中的4, 9. 显然,这是一个递归问题。 通过分析拆解,原问题不攻自破。话不多说,直接上代码: func isSymmetric(root *TreeNode) bool { if root == nil { return true } if root.Left == nil && root.Right !=

笔试面试题目:青蛙跳台与斐波那契数列

烂漫一生 提交于 2020-12-02 16:02:07
原文发表于: 今天周末,刚好也是程序员节,来聊一下青蛙跳台与斐波那契数列。很多年前,我在面试T公司的W部门时,遇到了青蛙跳台问题。 问题如下: 有n阶台阶,青蛙每次只能跳跃1阶或2阶,求跳上n阶台阶的方法数。 (1) 当n > 1000时,写程序求解。 (2) 求通项公式。 不得不说,要在面试现场解决这个问题,还是有一定难度的。记f(n)为青蛙跳上n阶台阶的方法数,则有: f(1) = 1 f(2) = 2 f(n + 2) = f(n + 1) + f(n) 这是一个经典的斐波那契数列,直接递归就可以求解: func fib(n int) int { if n <= 0 { // 异常处理 } if n == 1 || n == 2 { return n } return fib(n - 1) + fib(n - 2) } 但是,当n>1000时,f(n)是一个非常大的值,显然不能用上述方法。处理大数问题,可以参考之前的文章: 笔试面试题目:1000的阶乘问题 。 那么,如何求通项公式呢?方法很多,比如特征根法、矩阵法、生成函数法、Z变换法。 下面给出一种高中生就能看懂的方法,即构造数列法: 斐波那契数列的应用非常广泛,青蛙跳台、兔子繁殖、地面铺砖等问题,都是典型的斐波那契数列问题。 周末愉快,程序员节愉快。祝大家拿到心仪的offer. 来源: oschina 链接: https

二本学历,技术面都答对了,最终25K入职字节跳动

喜夏-厌秋 提交于 2020-12-02 15:23:58
前言 我的个人背景非常简单,也可以说丝毫没有亮点。 学历普通,计算机专业二本毕业,毕业后出来就一直在一家小公司,岁月如梭细,算了下至今从事Java开发已经5年了,也crud了五年,每天就是抄代码,毫无新意,甚至一度的怀疑人生。 其实很久之前就已经对自己不满了,每次都在想鼓起勇气想去打破困境,去改变自己,然而因为游戏因为玩耍一次又一次的破功;直到这次疫情,强有力的给了我当头一棒。是的,我失业了。这时候才真正的体会到什么叫做人无远虑,必有近忧。 失业之后疯狂的去找面经,去海投简历(都是一些小的不能再小的公司有回复),去找老朋友,去找同学;但是在疫情这么严重的当下根本不会找到合适的工作的,我也又冷静下来了,准备好好的调整下心态,整理下自己; 在这期间也七七八八的接到一些电话面试;这时候给了我个新的启示——可以去投一些小公司的简历,去面试扫盲,看看哪些东西不会,欠缺哪些知识,然后慢慢的做面试复盘。并且通过这些面试给自己查漏补缺; 幸运女神往往会眷顾努力的人,所以当好运降临到我头上,我并不诧异,目前拿到了字节跳动25K的offer,下文也不说废话,主要分享我这次“面试经历”和“这段时间的学习方法”,希望能帮助到你们。 字节一面 1、自我介绍; 2、介绍自己做的项目; 3、说一说项目中最有难度和记忆最深刻的项目; 4、说说Hashmap 原理; 5、底层红黑树是什么? 6、ArrayList

20多年的岁月里一路走来满是辜负与遗憾,从双非到阿里SP,收到offer的那天我哭惨了

梦想的初衷 提交于 2020-12-02 15:22:02
前言 2021届的秋招基本尾声,总的来说收获也算是匹配的到自己的付出。马上就要告别学生时代,接收社会的洗礼,但是感觉这几年的学习生涯依然历历在目。恰逢有朋友建议我可以整理一下从入行以来到秋招结束的学习路线与学习方法。转念一想也对,所以写下此文,也算是对自己的一个总结和交代吧。如果可以帮助到更多人,那自然是更好。对于秋招这个事儿,我已经发过两篇文章,所以也就不再赘述同样的内容 这篇文章主要目的是自己的一些心得分享,包括但不限于: 自己对工作选择的一些感想 自己准备秋招时为了弥补学校劣势的一些策略 对于薪资Argue的一些感悟 之前帖子没有涉及到的Java相关的语言复习内容 自己的一些学习方法总结 一些自己在用的学习工具的安利 主要面向的目标群体可能是一些未来要参加校招的同学(尤其是对自己学校学历等不是非常自信的同学),今年正在就业季备战春招的同学如果没有兴趣可以移步上述两篇更加直接的面经分享帖。 心路历程 个人情况 首先说一下个人情况,我本硕都是双非一本,院校水平在应届毕业生中属于较差的。但是最终在秋招之后收获了阿里、腾讯、美团等大厂的SP Offer,工作地也均是自己定居的城市。一路走来确实很幸运,但是自己也收获了一些东西,希望分享给大家可以帮助到有缘人。 工作选择 我个人认为没有最好的工作,只有最适合的工作。秋招路上,我也一直总是迷茫,互联网的高薪、国企的稳定都是非常诱人

拼多多内推3面(Java):B-Tree索引+AQS+GC+分布式+集群+数据拆分

霸气de小男生 提交于 2020-12-02 15:16:54
一面 osi七层网络模型,五层网络模型,每次层分别有哪些协议 死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决 如何判断链表有环 虚拟机类加载机制,双亲委派模型,以及为什么要实现双亲委派模型 虚拟机调优参数 拆箱装箱的原理 JVM垃圾回收算法 CMS G1 hashset和hashmap的区别,haspmap的底层实现put操作,扩容机制,currenthashmap如何解决线程安全,1.7版本以及1.8版本的不同 md5加密的原理 有多少种方法可以让线程阻塞,能说多少说多少 synchronized和reetrantlock锁 AQS同步器框架,countdowmlatch,cyclebarrier,semaphore,读写锁 二面 B-Tree索引,myisam和innodb中索引的区别 BIO和NIO的应用场景 讲讲threadlocal 数据库隔离级别,每层级别分别用什么方法实现,三级封锁协议,共享锁排它锁,mvcc多版本并发控制协议,间隙锁 数据库索引?B+树?为什么要建索引?什么样的字段需要建索引,建索引的时候一般考虑什么?索引会不会使插入、删除作效率变低,怎么解决? 数据库表怎么设计的?数据库范式?设计的过程中需要注意什么? 共享锁与非共享锁、一个事务锁住了一条数据,另一个事务能查吗? Spring bean的生命周期?默认创建的模式是什么

坚持,并不是那么容易的事

雨燕双飞 提交于 2020-12-02 10:37:45
文 / 王不留(微信公众号:程序员生存指南) 一朋友,一本院校毕业,在医疗行业干了1年,做药品销售代表。觉得干得没有成就感。就自学计算机谋求转型。 他当时选择很多人都不愿去的非洲,针对性地练习半年英语。社招进了华为。英语尚好,还愿意去热带,虽然技术次了点,但只要肯学就行,华为也何乐不为。 干了两年半,女朋友寂寞难耐,提出分手。于是回国,离职。出来以后决定改做算法,找到相关公司历练。四年后,考研,上了一所985院校,当了一名全日制学术型研究生。 当时第四年他差点没考上。他其实都已经做好这次考不上就再来一次的准备了。 面试阶段,他跟现在的导师沟通起码十次以上。导师最终决定选他。 当然,也不是没有别的学校要他,而是他觉得当时选的几所院校,抵不了这个导师所从事的研究。 在充实的研究生涯中,发了一篇SCI。今年参与了教材编写。导师要带他明年去东京工业大学交流,回来就是海外背景,学术的门槛也算踏了进去。 打算结婚了,老婆就是之前要闹分手的女朋友,两个人感情稳定,买了栋小别墅。 他是一位目标很明确那种人,平常也说过无数次要放弃,心理状态不好。你想,四年都坚持一件事,考研,是多么不容易。 现在他算是熬出来了,迎娶白富美,走上人生巅峰。也给了我很大的鼓舞。 坚持,这是一个沉甸甸的词。其中包含太多的艰辛和血泪,痛苦和无助。 想到自己定的目标,坚持每日写作100天,就深有感触。 今天应该是第28篇

设计模式在 Spring 框架中的良好应用

老子叫甜甜 提交于 2020-12-02 10:12:36
在开始正文之前,请你先思考几个问题: 你项目中有使用哪些 GOF 设计模式 说一说 GOF 23 种设计模式的设计理念 说说 Spring 框架中如何实现设计模式 假设我是面试官问起了你这些面试题,你该如何回答呢,请先思考一分钟。 好的,我们开始进入正题。设计模式实践里面提供了许多经久不衰的解决方案和最佳方案。这里,GOF 设计模式主要分为三大类:创建模式、结构模式和行为模式。创建模式对于创建对象实例非常有用。结构模式通过处理类或对象的组合来作用于企业级应用的设计结构,从而降低了应用的复杂性,提高了应用的可重用性和性能。行为模式的意图是一组对象之间的交互作用,以执行单个对象无法自己执行的任务。它描述了类或对象交互以及职责的分配。 那么,本文的核心话题是 Spring 如何通过使用大量设计模式和良好实践来构建应用程序。 工厂方法模式 Spring 框架使用工厂模式来实现 Spring 容器的 BeanFactory 和 ApplicationContext 接口。Spring 容器基于工厂模式为 Spring 应用程序创建 bean,并管理着每一个 bean 的生命周期。BeanFactory 和 ApplicationContext 是工厂接口,并且在 Spring 中存在有很多实现类。getBean() 方法是相对应的 bean 的工厂方法。 抽象工厂模式 在 Spring

我能想到的最浪漫的Java网络教程之Socket,三步到位!!!

六眼飞鱼酱① 提交于 2020-12-02 08:21:10
简说 如果要使用Java中的TCP/IP通过网络连接到服务器,则需要创建一个java.net.Socket对象以连接到服务器。如果使用JavaNIO,则还可以在JavaNIO中创建SocketChannel对象。 第一步创建Socket 以下示例代码连接到IP地址为89.53.64.191的服务器上的端口80。该服务器是Web服务器,端口80是Web服务端口。 Socket socket = new Socket("89.53.64.191", 80); 我们也可以像如下示例中使用域名代替IP地址: Socket socket = new Socket("wyzhang.com", 80); 第二步Socket发送数据 通过Socket发送数据,获取Socket的输出流( OutputStream ),示例代码如下: Socket socket = new Socket("jenkov.com", 80); OutputStream out = socket.getOutputStream(); out.write("some data".getBytes()); out.flush(); out.close(); socket.close(); 代码非常简单,但是想要通过网络将数据发送到服务器端,一定不要忘记调用flush()方法。操作系统底层的TCP

读者秋招上岸百度客户端开发经验分享(上)

妖精的绣舞 提交于 2020-12-02 07:53:48
读者准备面试的时间是 3 个月左右。但是,不是仅仅用 3 个月就能上岸大厂,之前也有计算机基础(网络、数据结构、操作系统、数据库、计组、微机原理等)。 前段时间,贾哥在星球向我询问 offer 选择的问题,我才知道贾哥已经斩获两个还不错的 offer。 贾哥和我一样都是双非本科,学历上面我们和大部分一样都没有任何优势。他的校招经历挺波折的,非常有参考价值。 于是,我就找到贾哥让他写一篇文章分享一下自己秋招的一些准备面试的经历以及经验。 贾哥写的太用心了,整篇文章大概有 1w+字。我将分为两次来发。觉得内容不错的话,大家记得点赞催更。 希望贾哥的分享对小伙伴们有帮助! 01 秋招这一路跌跌撞撞的走来,经历了很多心酸,也成长了很多。 从信心满满的开始,到不断地自我怀疑。从一个一无所知的菜鸡,到现在还是一个菜鸟。 我或许没有很多成功的逆袭经验来分享给大家。但是!我从一个秋招的裸奔男孩到理想上岸,收获的更多是失败的经验、成长的阅历和人生的考验吧! 我对计算机并没有激情满满的热爱,更多的是随着投入的时间和学习而产生的兴趣吧! 我是一个普通的不能在普通的大学生:双非本科,没有任何实习经历、比赛经历。 作为一个计算机学子,我大一大二几乎不知道自己将来会选择编程开发…… 听过很多秋招大佬的传奇逆袭经历,向往他们将热爱都投身到刷力扣的成就感中,羡慕他们在秋招时斩获大把 Offer。 社会遵循着 2