面试

一文串联 HTTP、TCP、IP、以太网

北城以北 提交于 2020-12-28 19:24:49
// 每日前端夜话 第460篇 // 正文共:4600 字 // 预计阅读时间:10 分钟 最近部门组织了一次前端性能优化交流会,大家从输入页面 URL 到最终页面展示内容这个过程提出了许多优化点。但同时发现很多同学对 HTTP 协议层的知识不能串联起来,于是整理了这篇文章,希望可以给大家带来一丝灵感。 当我们在页面上发起一个 AJAX 请求的时候,在网络协议层面都经历了哪些内容? // 发起请求 fetch( 'https://baidu.com' ) // 协议层1... // 协议层2... // 协议层3... . then (res=> // 得到结果 console.log(res) }) 如上述代码所示,我们对 baidu.com 发起了一个网络请求,最终在 then 方法中得到了具体的响应内容。 使用 Wireshark 抓包结果如下: 图片 图中可以看到,请求 baidu.com 时,首先通过 TCP 3 次握手建立连接,然后通过 HTTP 传输内容,最后通过 TCP 4 次挥手断开连接。 真实的过程更加复杂,我们主要分析以下几点: 建立连接阶段 通过 Mac 寻址找到服务器硬件接口(数据链路层) 通过网线向服务器硬件接口传输比特信息(物理层) DNS 域名解析(应用层) 建立 TCP 连接(传输层) 通过 IP 寻址找到目标服务器(网络层) 发送数据阶段 发送

年底那些放弃年终奖跳槽的人,到底是什么给他们的底气?

有些话、适合烂在心里 提交于 2020-12-28 18:58:28
都说年底是大家工作最安稳的时候,都在盼望年终奖,但最近依旧收到一些朋友跳槽成功的喜讯,大多数拿到了薪资非常丰厚的 Offer,足以让他们果断放弃年终奖。 但也有一些朋友,一想到要换工作就焦虑,一想到现在的工作薪资不满意也焦虑,再看到别人工作越来越好更焦虑,但就是没有底气面对面试这件事。 5年前你去面试,有点经验和项目背景,轻松可以 Carry 全场。现在面试需要看项目 背景、规模、架构原理、分布式技术、中间件、数据库、缓存、业务系统架构 等等一大堆内容架构相关的内容,恨不得每个面试者都是架构师。 就算你是面试初级研发岗位,很多面试官也会站在你的能力上一层,继续问一些架构设计问题。 比如 :“Redis 是否可以做为分布式锁?” 面试官更深层次的问题就是用 Redis 实现分布式锁会存在哪些问题 ,以及 为什么 Redis 会采用 AP 模型 等。 “ 我认识一位京东的面试官,他说: 很多研发工程师面试的时候基础问题上答得不错,却往往栽在架构设计问题上。 要么回答的不够有深度,要么考虑的不够全面,或者干脆直接把网上看到的方案抄过来,哪里有坑都不知道。 之所以考架构的本质,就是衡量你对技术深度和对技术的驾驭能力。 如果你能在“如何设计系统架构”上回答得有条理、体现自己的思考,很容易得到认可,甚至掩盖个别技术问题上回答的不足。 没有设计经验,不了解面试前需要准备哪些架构设计问题?

王不留,混迹基层八年穷屌丝,考研准备四个月,考上中国科技大学MBA,成为一家软件上市公司中层管理者

一个人想着一个人 提交于 2020-12-28 18:45:58
文 / 王不留(微信公众号:王不留) 我叫王不留,2018年,我在知乎分享了我的备考经历。 陆续有上千位同学加我微信,我与他们分享了在职备考中科大研究生的经历和全年备考计划。 这两年,很多朋友通过努力,考上了北大光华、中科大、同济、中海大……祝贺他们! 今天,2020年12月26号,又是经历一年付出,真正收获成果的一天。 在此日子,我起笔重写我的备考经历和感受,希望对于即将踏上考研征程的朋友有所帮助。 1. 我2007年大学毕业,到了一家公司,出差西安搞项目实施,虽然计算机科班出身,但搞代码开发较少。 刚工作时,因为什么业务都不熟悉,干得非常辛苦,半年后,基本业务知识已有所掌握。才慢慢清闲下来,就这样一忙一闲,没有追求,期间经历了结婚生子,八年岁月转眼即逝。 2015年初,我躺在沙发上玩手机,爱人做饭的时候飘来一句话: “你都满30岁了,不能再这样混日子了,要不提升个学历吧,报个中科大MBA!” 我看着新闻,回了她,“我听同事说过,学费要九万三呢,哪有这些钱?” 当时的我仍是一个当了六年的实施项目经理,月工资一万一。爱人全职带小孩,去掉奶粉钱和各种开销,每月只能剩五千。 “这点钱算什么。我愿意出!” 看着她坚定的目光,我无奈地回答:“好吧,听你的。” 在妻子的不断督促下,我开启了MBA备考之路。 当时也有几个朋友计划报考。听前辈说考试简单,数学都是高中知识,不难。大家摩拳擦掌

八大经典排序算法详解

风格不统一 提交于 2020-12-28 16:23:27
我记得上大学的时候,老师一直跟我们强调:“ 算法才是编程的灵魂 ”,找工作面试的时候,算法和数据结构也是绝对不可避免的,面试官可能一言不合就让你手写一个排序算法。 我把最经典的八大排序算法原理和代码也都整理出来了,内容如下,希望对大家能有所帮助。 插入排序 • 基本思想:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 • 算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。 • 代码: public static void insertionSort ( int [] array ){ int tmp ; for ( int i = 1 ; i < array . length ; i ++){ tmp = array [ i ]; //将当前位置的数给tmp int j = i ; for (; j > 0 && array [ j - 1 ]> tmp ; j --){ /* 往右移,腾出左边的位置, array [ j - 1 ]> tmp :大于号是升序排列,小于号是降序排列 */ array [ j ] = array [ j - 1 ]; } //将当前位置的数插入到合适的位置 array [ j ] = tmp ; } } 冒泡排序 • 基本思想:持续比较相邻的元素。如果第一个比第二个大

一个好习惯——每年至少更新一次简历

落爺英雄遲暮 提交于 2020-12-28 15:47:30
一个好习惯——每年至少更新一次自己的简历,而不是等到找工作才写简历。 1、简历是随时间、产品开发或项目经历积累出来的,不是现写的 项目结束或者产品发布后的当天晚上是最佳时机!!越往后,记忆曲线决定信息丢失率越高! 一页 ppt 或者一页A4纸肯定就能介绍清楚,如果还不够,说明:还需要提炼。 如果:写不出来东西,你该反思了?? 这个项目一点收获没有吗? 架构能力、设计、开发、运维、管理提升的点都是可以写的点。 2、人的记忆周期是有限的,总结要写出来,单靠脑子不灵 哪怕你负责的项目、你带过的团队,三年、五年后,你可能会连项目名都不记得了。 别拖延,哪怕你有拖延症。 面试别人的时候,问到一个项目经历,经常收到的回复:这个项目比较久了,忘记了。 我一般会进一步思考:忘记了可以不写,但一旦写了,你就得能讲出来!!这很重要。 所谓:重点突出、详略得当也大抵不过如此! 3、简历准备重点突出什么,你就积累什么 包含不限制: 第一:项目背景(概述); 第二:使用技术; 第三:我负责内容(团队人数)和工作亮点(最多三个)。 4、写完后,要自己能复述出来 咱们程序员通病:写代码可以,和测试吵架可以。 但,你让我概括讲出来我做的项目?不行,不会讲。 能写出来已经很不错,但再能讲出来,就更厉害了。 现在不讲,面试就很容易支支吾吾,影响整体面试体验。 5、简历的确需要常写常新 找到靠谱的模板,至少每年更新一次

java命名规范

爱⌒轻易说出口 提交于 2020-12-28 14:18:19
一、命名规范 1、 项目名全部小写 2、 包名全部小写 3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。 如:public class MyFirstClass{} 4、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。 如:int index=0; public void toString(){} 5、 常量名全部大写 如:public static final String GAME_COLOR=”RED”; 6、所有命名规则必须遵循以下规则: 1)、名称只能由字母、数字、下划线、$符号组成 2)、不能以数字开头 3)、名称不能使用JAVA中的关键字。 4)、坚决不允许出现中文及拼音命名。 二、注释规范 1、 类注释 在每个类前面必须加上类注释,注释模板如下: /** Copyright (C), 2006-2010, ChengDu Lovo info. Co., Ltd. FileName: Test.java 类的详细说明 @author 类创建者姓名 @Date 创建日期 @version 1.00 */ 2、 属性注释 在每个属性前面必须加上属性注释,注释模板如下: /** 提示信息 */ private String strMsg = null; 3、 方法注释 在每个方法前面必须加上方法注释,注释模板如下: /*

Java 泛型 泛型的约束与局限性

爷,独闯天下 提交于 2020-12-28 08:20:25
不能用基本类型实例化类型参数 不能用类型参数代替基本类型:例如,没有Pair,只有Pair,其原因是类型擦除。擦除之后,Pair类含有Object类型的域,而Object不能存储double值。这体现了Java语言中基本类型的独立状态。 运行时类型查询只适用于原始类型(raw type) 运行时:通常指在Classloader装载之后,JVM执行之时 类型查询:instanceof、getClass、强制类型转换 原始类型:即(raw type),泛型类型经编译器类型擦除后是Object或泛型参数的限定类型(例如Pair,Comparable就是T的限定类型,转化后泛型的原始类型就是Comparable,所以Pair类不带泛型是Pair),即Pair类含有Comparable类型的域 JVM中没有泛型 if(a instanceof Pair<String>) //ERROR,仅测试了a是否是任意类型的一个Pair,会看到编译器ERROR警告 if(a instanceof Pair<T>) //ERROR Pair<String> p = (Pair<String>) a;//WARNING,仅测试a是否是一个Pair Pair<String> stringPair = ...; Pair<Employee> employeePair = ...; if(stringPair

Java 模拟servlet执行、DTD约束、Schema约束、dom4j解析

旧城冷巷雨未停 提交于 2020-12-28 08:20:09
模拟servlet执行 浏览器请求WEB服务器上的资源,WEB服务器返回给浏览器 浏览器的入口不同(访问路径),访问的资源也不同。 我们需要使用xml约束(DTD或schema);为了获得xml的内容,我们需要使用dom4j进行解析。 XML(不同路径(/hello)执行不同的资源( HeIIoMyServlet)) XML可扩展的标记语言 标签可自定义的 包下创建xml 文件 new → other → XMLFile 粘贴web-app_ 2_ 3.dtd文件 复制web-app_ 2_ 3.dtd的文档声明到xml文件 存放数据 <?xml version="1.0" encoding="UTF-8"?> XML文档声明第一行 顶格写 versioin:XML版本encoding:文档的编码 默认utf-8: //加入Java开发交流君样:756584822一起吹水聊天 <school name="oracle" size="3"> 元素(不以XML,xml开头)一个根元素 <person> 属性值必须使用单引或双引 <name>张三<</name> 元素内容 转义符 写法与html相同 <age><![CDATA[18><]]></age>CDATA区<![CDATA[内容自动转义]]> <c/> 空元素 </person> <!--注释--> </school>

【美团面试题】——图遍历

梦想的初衷 提交于 2020-12-28 08:04:01
题目: 给定一个包含N个节点的连通图,节点编号1到n。共有n-1条边。从1号节点出发,问遍历所有节点最短路程多少? 数据输入方式:共n行,第一行是节点个数。下面的n-1行每一行为两个正整数,代表互相连通的两个节点。 !@#¥%: 题目没有明确1号节点是否在图的边缘,也没有提到图的复杂度如何。 网上看了几个别人的程序,但有的程序太过简单,稍微复杂一点的图结果就不对了。下来在VS里编了下,没有调用别的复杂的库,只是用了 vector 。 我这个程序虽然能应对复杂一点的图,但还不是可以应对所有情况,限制条件为: 1)1号节点必须在图的边缘; 2)分支深度不能大于1。如下图,左面的分支为 6-7、6-8,深度均为1;右图分支为 6-7、6-8-9,深度为1和2。 程序(C++): 头文件 map_gao.h #pragma once #include<vector> #include<iostream> using namespace std; namespace gao{ class node { public: node() :used(false), num(0) {} bool used; //是否已被cull int num; //连接的节点数 vector<int> neigh; //邻居节点序号 vector<int> getchild_id() { return neigh

3种Python数据结构,13种创建方法,这个总结,超赞!

爱⌒轻易说出口 提交于 2020-12-28 03:14:26
点击上方 蓝字 关注我们 点击上方“ 印象python ”,选择“ 星标 ”公众号 重磅干货,第一时间送达! Python常用的 数据结构,有如下几种。 但是我们用的最多的,还是字符串、列表、字典这3种。 其实学习任何一门编程语言,最基础的就是学习它的数据结构。 拿Python来说,数据结构的概念也是超级重要,不同的数据结构,有着不同的函数,供我们调用。 接下来,我们分别来介绍字符串、列表、字典的创建方法。 01 字符串的3种创建方式 ① 单引号(‘ ’),创建字符串 a = 'I am a student' print(a) 结果如下: 👇 👇 👇 ② 双引号(“ ”),创建字符串 b = "I am a teacher" print(b) 结 果如下: 👇 👇 👇 ③ 续3个单引号或者3个单引号,创建多行字符串 c = ''' I am a student My name is黄伟 I am a teacher My name is陈丽 ''' print(c) 结果如下: 👇 👇 👇 02 列表的5种创建方式 ① 用[]创建列表 a = [1,2,3] print(a) 结果如下: 👇 👇 👇 ② 用list创建列表 b = list('abc') print(b) c = list((1,2,3)) print(c) d = list({"aa":1,"bb":3})