面试

四面腾讯与华为,大厂前端面试真BT!

馋奶兔 提交于 2020-11-19 08:55:50
今年算是经历颇多的一年了,腾讯和华为都走了几趟(一共面试了四个部门),拿了两个offer。(开心.png),但还是挂了两次,有点遗憾。 面试题总结 面试完之后,赶紧总结了一波,前端这个岗位,这两家大厂的面试思路和面试问题其实都差不多: 1. JS底层: 说一说js的原型与继承。 分析一下优秀的前端框架源码,这么写的优缺点在哪。 this指向问题,this的深拷贝如何实现,这个也是高频率被问到的问题。 js事件流是怎么样体现的。 柯里化函数。 2. 数据层: 写过中间件么? 了解koa么? 数据安全是怎么处理的。 axios 与 fetch的实现。 3. HTTP相关: 跨域问题的产生与解决。 http1.1时如何复用tcp连接。 http2.0新的变化。 http报文的请求分成几个部分? 前端与后台交互的时候会产生几次握手,分别做了什么? 4. 框架: 说一说vue的源码的响应式与数据驱动,主要是问原理。 Vue与react的区别在哪,这个也是问底层实现。 虚拟dom、diff算法等等,基本没问到过怎么去使用。 像组件传值啥的没提过。还有就是路由的管理 有没有封装过组件库, dev-server是怎么跑起来的。 5. 服务端与工具 主要是Node的问题,有没有拿node做过中间层。 Node的线程处理、事件循环。 这个主要就是 webpack 与 babel 的配置

个人大厂面经分享:抖音三面+腾讯四面+PayPal四面

*爱你&永不变心* 提交于 2020-11-19 07:31:42
本人双非一本非科班,之前在百度和字节实习过,这次其实没抱着什么特别大的希望投递,没想到字节可以再给我一次机会,还是挺开心的。 几场面试下来,面试得自信,声音自信,给面试官一种你啥都会稳如狗的感觉(实际内心慌得不行...),然后表达流畅,吐字清晰,不卑不亢,说话要有逻辑性,不能吞吞吐吐半天说不明白,得总结自己的面经, 形成自己的知识体系 ,别人的面经写的再好也是别人的,自己刷面经总结自己不会的点整理出来才是最有用的 下面是面试经历全部写的是技术面试,hr面就没写了 1. 抖音 整个面试过程,主要围绕算法和实习经历考察,基础知识的话不是很难。每一面的面试官都很nice,特别是三面的面试官,感觉在讨论的时候没有带着面试的压力,就是朋友之间的对话。 抖音一面(60分钟) 自我介绍 说下TreeMap和LinkedHashMap TreeMap怎么按照自己想要的顺序排序 ConcurrentHashMap怎么取的size值 怎么防止恶意请求刷接口 那ES怎么切词的呢,有写过切词插件吗 你在项目中用Redis的场景 说下Redis有哪些数据类型 Redis怎么分片的 Redis的删除策略 抖音二面(60分钟) 你希望你处于一个什么样的工作环境 怎么根据0-5随机函数得到0-8随机函数 缓存和DB之间怎么保证数据一致性 延时消息队列怎么设计Redis的zset

Spring Boot整合Thymeleaf模板引擎

。_饼干妹妹 提交于 2020-11-19 07:27:03
什么是Thymeleaf Thymeleaf是一款用于渲染XML、XHTML、HTML5内容的模板引擎。类似Velocity,FreeMaker模板引擎,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。 Thymeleaf也是Spring Boot首要支持的模板引擎,并且在最新的Spring Boot版本中已经不再支持Velocity了。 官网:http://www.thymeleaf.org/ 引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖。 <dependency> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-thymeleaf </artifactId> </dependency> 引入该依赖后会自动引入web依赖,不需要再单独引入web依赖。 自动配置说明 下面是Thymeleaf的自动配置相关类。 Thymeleaf的自动配置类: org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration Thymeleaf的自动配置参数类: org.springframework.boot.autoconfigure

美团面试挂了后,于是我花几个月整理了这些面试题,然后讲讲我的面试经历

我怕爱的太早我们不能终老 提交于 2020-11-19 07:25:00
前言 离在美团的面试挂了已经几个月了,到现在我心情还是久久不能平静,可是这只能怪我自己,没有过硬的技术能力,也没有提前准备,只能在面试挂了后留下悔恨的泪水(西湖的水,我的泪),然后做着亡羊补牢的事,我不希望你们也像我一样,所以我把我面试的经历,和我花几个月整理的大厂面试题和大家分享,希望别大家别走我的老路。 说实话,去美团面试还是有点紧张的 美团一面 1.自我介绍,其中很多问题是围绕我简历问的 2.线程池详解 3.java虚拟机模型介绍 4.新生代晋升策略 5.使用的垃圾回收器 6.JAVA11的新特性 7.Hashmap特别简单的介绍 8.MySQL的ACID与redolog undolog binlog 9.项目遇到的问题 10.类加载 11.简单说了说Sychronized与JUC 12.Sychronized的作用域 13.对异常体系的看法 14.对于一个不报错的insert,你怎么排查错误 15.写题 1.常规的成绩SQL查询 2.求PI 3.double check的singleton 4.回文字符串 二面 一面结束后,面试官让我稍等,我以为今天面试就结束了,结果等来了第二位面试官,也是技术面。 自我介绍,介绍一下项目流程 进程和线程的区别 Synchronized与Lock的区别 事务隔离级别和实现原理,mysql发生锁死怎么办? Java的垃圾回收机制

To my dear friends in SFAE

青春壹個敷衍的年華 提交于 2020-11-19 07:22:48
To my dear friends in SFAE, 这不是farewell,我还在西门子大家庭。2018年1月份我会转到SLC MCBU。在SFAE十年,一些敢想,唠叨唠叨~ 十年弹指一挥间。记得10年前来公司面试时的紧张和激动。丁工和赵大云(当时的工程部经理)给我面试。丁工说让我不要紧张,还是紧张的要命。 拿到了offer,立刻跑到公司楼下,抽了两根烟,压压惊。 刚进公司,是在工程部的数控组。谁还记得,当年的一家面馆还在马路的南侧。中午,在马庆伟、朱永刚和郑津鹏的带领下,我们常去那家叫久昌的饭店吃饭。 感谢马庆伟带我去大连出第一次差,见识到了龙门铣,也见识了工程师的从容不迫。还有蒋振生同志,我的问题你有问必答,你是我的老师。 07年,社招的我,和Engineer30几乎同时入职,我们年龄相仿,在实验室一起做实验,一起成长。那时大家的学习热情非常高涨,四台840D的样机都不够用,还要早起去实验室抢座位。 胡宁、武坤、吕钦,我们在十年前就是战友了。 记得和罗春辉、熊金斌在成都凯特瑞项目调试的时光,我们和用户一起在工地吃着盒饭,吹着牛。看着工厂、生产线一天一天的建成。 大概11年的时候,我在实验室做实验,听到刘合军和吴启智讨论一个机械手上使用凸轮问题。我跑去问你们,什么是凸轮? 你们解释了半天,我也没有听懂。随后我就决定,既然听不懂你们说啥,我就加入你们。于是,感谢孟琦和吴启智

【Java】 剑指offer(39) 数组中出现次数超过一半的数字

被刻印的时光 ゝ 提交于 2020-11-19 07:21:43
本文参考自《剑指offer》一书,代码采用Java语言。 更多: 《剑指Offer》Java实现合集 题目    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 思路    思路一: 数字次数超过一半,则说明:排序之后数组中间的数字一定就是所求的数字。   利用partition()函数获得某一随机数字,其余数字按大小排在该数字的左右。若该数字下标刚好为n/2,则该数字即为所求数字;若小于n/2,则在右边部分继续查找;反之,左边部分查找。    思路二: 数字次数超过一半,则说明:该数字出现的次数比其他数字之和还多   遍历数组过程中保存两个值:一个是数组中某一数字,另一个是次数。遍历到下一个数字时,若与保存数字相同,则次数加1,反之减1。若次数=0,则保存下一个数字,次数重新设置为1。由于要找的数字出现的次数比其他数字之和还多,那么要找的数字肯定是最后一次把次数设置为1的数字。   也可以这样理解(来源: 牛客网 cm问前程 ):    采用阵地攻守的思想:   第一个数字作为第一个士兵,守阵地;count = 1;   遇到相同元素,count++;   遇到不相同元素,即为敌人,同归于尽,count--

日志打印的正确姿势!

拈花ヽ惹草 提交于 2020-11-19 05:18:01
点击上方 "IT牧场" ,选择 "设为星标" 技术干货每日送达! 来源:http://t.cn/E9BkD7a 使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 基本格式 必须使用参数化信息的方式: logger .debug (" Processing trade with id : [{}] and symbol : [{}] ", id , symbol ); 对于debug日志,必须判断是否为debug级别后,才进行使用: if (logger.isDebugEnabled()) { logger.debug( "Processing trade with id: " + id + " symbol: " + symbol); } 不要进行字符串拼接,那样会产生很多String对象,占用空间,影响性能。 反例(不要这么做): logger.debug(

一道有意思的多线程面试题 C# 代码实现

£可爱£侵袭症+ 提交于 2020-11-19 05:10:20
文章转载自: http://www.pythonheidong.com/blog/article/2553/ 如果你对多线程的控制不怎么了解,那么理解了这篇文章的内容也许对你有帮助。鼓励先自己动手实现一遍,做不出来在看代码。 题目一:两个线程交替打印0~100的奇偶数 这道题就是说有两个线程,一个名为偶数线程,一个名为奇数线程,偶数线程只打印偶数,奇数线程只打印奇数,两个线程按顺序交替打印。 本文重点不是说的这道题,这道题是下面那道题的简单版本,用来做个过渡。 效果图: 此题核心点就是如何控制多线程的执行顺序,我们知道C#的System.Threading命名空间给开发者提供了控制线程相关的对象,线程同步常用对象有:Semaphore,ManualResetEvent,AutoResetEvent,这里我用AutoResetEvent来实现,代码如下: public class ThreadExample { /// <summary> /// 两个线程交替打印0~100的奇偶数 /// </summary> public static void PrintOddEvenNumber() { var work = new TheadWorkTest(); var thread1 = new Thread(work.PrintOddNumer) { Name = " 奇数线程 " }

redis 的过期策略都有哪些?内存淘汰机制都有哪些?

独自空忆成欢 提交于 2020-11-19 04:56:34
面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责? 常见的有两个问题: 往 redis 写入的数据怎么没了? 可能有同学会遇到,在生产环境的 redis 经常会丢掉一些数据,写进去了,过一会儿可能就没了。我的天,同学,你问这个问题就说明 redis 你就没用对啊。redis 是缓存,你给当存储了是吧? 啥叫缓存?用内存当缓存。内存是无限的吗,内存是很宝贵而且是有限的,磁盘是廉价而且是大量的。可能一台机器就几十个 G 的内存,但是可以有几个 T 的硬盘空间。redis 主要是基于内存来进行高性能、高并发的读写操作的。 那既然内存是有限的,比如 redis 就只能用 10G,你要是往里面写了 20G 的数据,会咋办?当然会干掉 10G 的数据,然后就保留 10G 的数据了。那干掉哪些数据?保留哪些数据?当然是干掉不常用的数据,保留常用的数据了。 数据明明过期了,怎么还占用着内存? 这是由 redis 的过期策略来决定。 面试题剖析 redis 过期策略 redis 过期策略是:定期删除+惰性删除。 所谓定期删除,指的是 redis 默认是每隔 100ms

一道有意思的面试算法题

狂风中的少年 提交于 2020-11-19 04:55:41
新年第一篇文章,先祝大家新年快乐!!那么接下来进入正文。 前言 前阵子突发奇想,突然开始刷leetcode。其中刷到了一道有意思的题目,发现这道题是当时秋招的时候,腾讯面试官曾经问过我的题目。于是分享给大家看下。 题目描述 给定一个 非空 整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 初步解法 这道题第一眼看过去,思路挺简单的,我们只需要维护一个对象来记录每一个元素出现的次数,使用元素的值作为key,元素出现的次数作为value。之后再遍历这个对象,找到value为1的key。对应的key就是那个元素。代码如下: function singleNumber(nums) { const obj = {}; for (let i = 0; i < nums.length; i++) { obj[nums[i]] = obj[nums[i]] ? obj[nums[i]] + 1 : 1; } for (let key in obj) { if (obj[key] === 1) { return Number(key); // 由于 key 是 string ,因此我们这里需要转化下 } } } console.log(singleNumber([2, 2, 1, 4, 4, 5, 5, 1, 8])); // 8 增加限制 是吧