Tiny'Wo | 小窝

网络中的一小块自留地

面试官:说说你对git reset �?git revert 的理解?区别�?

一、是什�?

git reset

reset用于回退版本,可以遗弃不再使用的提交

执行遗弃时,需要根据影响的范围而指定不同的参数,可以指定是否复原索引或工作树内�?

git revert

在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化,不会改变过去的历史,主要是用于安全地取消过去发布的提�?

二、如何用

git reset

当没有指定ID的时候,默认使用HEAD,如果指定ID,那么就是基于指向ID去变动暂存区或工作区的内�?

1
2
3
4
5
// 没有指定ID, 暂存区的内容会被当前ID版本号的内容覆盖,工作区不变
git reset

// 指定ID,暂存区的内容会被指定ID版本号的内容覆盖,工作区不变
git reset <ID>

日志ID可以通过查询,可以git log进行查询,如下:

1
2
3
4
5
6
7
8
9
10
11
commit a7700083ace1204ccdff9f71631fb34c9913f7c5 (HEAD -> master)
Author: linguanghui <linguanghui@baidu.com>
Date: Tue Aug 17 22:34:40 2021 +0800

second commit

commit e31118663ce66717edd8a179688a7f3dde5a9393
Author: linguanghui <linguanghui@baidu.com>
Date: Tue Aug 17 22:20:01 2021 +0800

first commit

常见命令如下�?

  • –mixed(默认):默认的时候,只有暂存区变�?

  • –hard参数:如果使�?–hard 参数,那么工作区也会变化

  • –soft:如果使�?–soft 参数,那么暂存区和工作区都不会变�?

git revert

git reset用法基本一致,git revert 撤销某次操作,此次操作之前和之后�?commithistory都会保留,并且把这次撤销,作为一次最新的提交,如下:

1
git revert <commit_id> 

如果撤销前一个版本,可以通过如下命令�?

1
git revert HEAD

撤销前前一次,如下�?

1
git revert HEAD^

三、区�?

撤销(revert)被设计为撤销公开的提交(比如已经push)的安全方式,git reset被设计为重设本地更改

因为两个命令的目的不同,它们的实现也不一样:重设完全地移除了一堆更改,而撤销保留了原来的更改,用一个新的提交来实现撤销

两者主要区别如下:

  • git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
  • git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内�?- 在回滚这一操作上看,效果差不多。但是在日后继续 merge 以前的老版本时有区�?

    git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,之前提交合并的代码仍然存在,导致不能够重新合�?>
    但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引�?

  • 如果回退分支的代码以后还需要的情况则使用git revert�?如果分支是提错了没用的并且不想让别人发现这些错误代码,则使用git reset

参考文�?

面试官:说说你对git stash 的理解?应用场景�?

一、是什�?

stash,译为存放,�?git 中,可以理解为保存当前工作进度,会把暂存区和工作区的改动进行保存,这些修改会保存在一个栈�?
后续你可以在任何时候任何分支重新将某次的修改推出来,重新应用这些更改的代码

默认情况下,git stash会缓存下列状态的文件�?

  • 添加到暂存区的修改(staged changes�?- Git跟踪的但并未添加到暂存区的修改(unstaged changes�?
    但以下状态的文件不会缓存�?
  • 在工作目录中新的文件(untracked files�?- 被忽略的文件(ignored files�?
    如果想要上述的文件都被缓存,可以使用-u或者--include-untracked可以工作目录新的文件,使用-a或者--all命令可以当前目录下的所有修�?

二、如何使�?

关于git stash常见的命令如下:

  • git stash

  • git stash save

  • git stash list

  • git stash pop

  • git stash apply

  • git stash show

  • git stash drop

  • git stash clear

git stash

保存当前工作进度,会把暂存区和工作区的改动保存起�?

git stash save

git stash save可以用于存储修改.并且将git的工作状态切回到HEAD也就是上一次合法提交上

如果给定具体的文件路�?git stash只会处理路径下的文件.其他的文件不会被存储,其存在一些参数:

  • –keep-index 或�?-k 只会存储为加�?git 管理的文�?
  • –include-untracked 为追踪的文件也会被缓�?当前的工作空间会被恢复为完全清空的状�?- -a 或�?–all 命令可以当前目录下的所有修改,包括�?git 忽略的文�?

git stash list

显示保存进度的列表。也就意味着,git stash命令可以多次执行,当多次使用git stash命令后,栈里会充满未提交的代码,如下�?

其中,stash@{0}stash@{1}就是当前stash的名�?

git stash pop

git stash pop 从栈中读取最近一次保存的内容,也就是栈顶的stash会恢复到工作�?
也可以通过 git stash pop + stash名字执行恢复哪个stash恢复到当前目�?
如果从stash中恢复的内容和当前目录中的内容发生了冲突,则需要手动修复冲突或者创建新的分支来解决冲突

git stash apply

将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删�?
也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况

同样,可以通过git stash apply + stash名字执行恢复哪个stash恢复到当前目�?

git stash show

查看堆栈中最新保存的stash和当前目录的差异

通过使用git stash show -p查看详细的不�?
通过使用git stash show stash@{1}查看指定的stash和当前目录差�?

git stash drop

git stash drop + stash名称表示从堆栈中移除某个指定的stash

git stash clear

删除所有存储的进度

三、应用场�?

当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态, 而这时你想要切换到另一个分支或者拉下远端的代码去做一点别的事�?
但是你创建一次未完成的代码的commit提交,这时候就可以使用git stash

例如以下场景�?
当你的开发进行到一�?但是代码还不想进行提�?,然后需要同步去关联远端代码�?如果你本地的代码和远端代码没有冲突时,可以直接通过git pull解决

但是如果可能发生冲突怎么�?直接git pull会拒绝覆盖当前的修改,这时候就可以依次使用下述的命令:

  • git stash
  • git pull
  • git stash pop

或者当你开发到一半,现在要修改别的分支问题的时候,你也可以使用git stash缓存当前区域的代�?

  • git stash:保存开发到一半的代码
  • git commit -m ‘修改问题’
  • git stash pop:将代码追加到最新的提交之后

行为面试技�?

HR 行为面试,考察工作态度和价值观�?
::: tip

  • HR 权利很大,可以拒绝你入职。所以和 HR 聊天要态度温婉�?- 无论你真实想法如何,HR 面试时要表现出一切都是为了公司和工作。工作好了,我才能好�?- 注意倾听,HR 可能会“挖坑”(个人缺点、如何评价前领导等),不要啥实话都往外说�?
    :::

::: tip
如有疑问,可免费 加群 讨论咨询,也可参�?1v1 面试咨询服务�?专业、系统、高效、全流程 准备前端面试
:::

个人介绍

::: tip
这个问题在任何面试环节都可能会被问到,提前准备�?:::

使用如下模板,用自然舒缓的语�?1min 之内表达完,时间不要太长�?

  1. 个人履历,近几年的教�?工作经历
  2. 擅长的业务领域(如医疗�?D、地图等),做过的主要项�?3. 擅长的技术栈 —�?程序员,最终还是要说到技术上

注意事项

  • 不要太短,不要两三句话说完,要尽量全面的表达出自�?- 不要太啰嗦,不要深入细节,对方可能听不懂(这才面试刚开始)
  • 要有条理性,不要想一个说一个,逻辑很混�?

离职原因�?

常规说法:想换一个更大的平台,继续提升自己的能力�?
如被裁员:实话实说即可,现在这行情被裁员也很正常�?
注意事项

  • 不要谈钱,不要说为了涨工资而离�?- 不要谈任何前公司的坏话,例如 xxx 项目/领导 不好而离�?

空窗期为何这么久�?

有些同学被裁员,然后迟迟未找到工作,空窗期可能几个月甚至半年多�?
推荐表达:一开始对自己要求比较高,想找一个理想的工作,一直没有合适的机会�?
注意事项

  • 不要说“学习了一段时间”,暴露自己技术能力不�?- 不要说“休息了一段时间”,我们都自愿加班,根本不需要休�?- 不要说“出去玩了”,老板�?HR 不喜欢爱玩的员工

你为何选择我们公司�?

推荐表达方式

  • 提前熟悉公司背景、主营业务、JD 招聘信息、负责的项目
  • 说出其中�?xxx 项目/技�?比较吸引你,或�?xxx 福利比较吸引�?- 再说出自己的 xxx 技能比较符合公司的招聘要求,所以就投了简�?
    注意,千万不能说:因为你们公司招聘啊!—�?这种无脑回答

你对这份工作有什么期许?

推荐表达方式

  • 希望通过这个工作,参与项目,团队分享等,能让自己�?xxx 技术领域,提升更高一个层�?- 自己技术提升了,才能更好的服务于公司的项目/产品,承担更重要的职�?
    要点是:自己的进步是为了公司服务的,这是 HR 喜欢的价值观�?

你喜欢什么样的团队和领导�?

推荐表达方式

  • 喜欢一个有技术氛围的团队,喜欢分享技术的领导,大家可以一起成长进�?- 技术氛围好,才能更好的保证代码质量和产品稳定�?
    同理:谈技术进步,也是为了公司产品服务的,这是 HR 喜欢的价值观�?

未来 3-5 年的规划是什么?

参考上文“你对这份工作有什么期许?”的回答方式�?
技术进�?+ 承担更重要的职责 + 为公司项目服务

如何看待加班�?

前两年我们一般回答:加班就像借钱,救急不救穷 —�?即,可以偶尔加班,但不能长久加班�?
但是,近两年风向早就变了,加班成了常态,而且有的会比较加班工时�?
所以现在再回复这个问题,就得换一种说法:认可加班�?
其实换位思考一下,如果我们也严格执�?8 小工作制,那你的工资还会这么高吗?你是否愿意每日工作 8 小时,同时降�?40% �?

你的优点是什么?

我们的文化比较内敛,大家都过于谦虚,不擅长宣传自己,尤其是程序员行业�?
都会觉得自己没有啥优点,如果不提前准备,被问到这个问题可能就懵了�?
优点,就是指你觉得自己比较好的部分,并不是说一定比别人优秀、甚至是专家。不是的,大部分都是普通人�?
推荐表达方式

  • 优先选择**硬技�?*,自己擅长的技术领域,业务领域,能更好的用于工作中�?- 如果实在找不到擅长的技术领域,可以说一�?*软技�?*:认真,准时,容易沟通,为人和善友好,工作有激情,英语�?..

遇到这个问题你就想办法夸自己,不要过于谦�?—�?能表达自己的优点,这本身也是个优点�?

你的缺点是什么?

注意,这是个坑!不要傻乎乎的真把自己的缺点说出来,暴露给别人看�?
正确的方式是:说缺点,也要说自己的补救措施,最终体现自己是一个爱学习、要求进步的人�?
推荐的表达方�?

  • 我觉得自己目前在 xxx 方面还有所欠缺
  • 但我已经开始通过 xxx 学习这方面的知识了,计划 xxx 天以后即可完�?

是否和前领导有过冲突?如何解决的�?

准备一个工作中具体的例子,使用 STAR 模型讲解,例如:

  • Situation 背景:记得在 xxx 项目中,我和领导有了不一致的意见,我认为应该�?xxx ,他认为应该�?yyy
  • Task 目标/任务:但我们都是为了同一个目标,能把项目尽快上线,达到客户的要求
  • Action 行动/解决方案:我们找来项目组核心成员,以及客户的核心成员,一起开会讨论,列出当前所有任务,划分优先级,重新制定时间计划,并且得到客户的认可
  • Result 结果:最后项目成功上线,且客户很满意我们的沟通方式和做事效率

注意事项

  • 工作中的冲突一般都是:任务太多,资源(人,时间)不�?- 冲突要完全是客观的,完全和工作相关的,一定是对事不对人的
  • 不要说前领导/前公司的坏话,大家都是为了把工作做好

是否和同�?项目成员有过冲突?如何解决的�?

参考上一题�?
上一题中,和领导有冲突需要找客户沟通确认。而这一题,你和同事有了冲突,就需要找领导沟通确认。其他都是一样的�?

是否和客�?甲方有过冲突?如何解决的�?

参考上一题�?
和客户发生了冲突,首先要第一时间和你领导沟通,说明情况。再和领导一起找客户沟通�?
所以,这些问题都离不开 同事 领导 客户 这几个常见角色�?
�?C 端产品的可能没有明确的甲�?客户,那和你发生冲突的可能是 PM 产品经理,沟通方式是一样的�?

如果 PM 给你的项目加需求,你该如何应对�?

在项目管理中有个专业术语叫“需求蔓延”,英文 Scope creep / requirement creep

意思就是本来定好了需求、开发计划,但是 PM 今天加个按钮,明天加个图标,后天加段文字…

遇到这种问题的常见解决方�?

  • 先和自己领导沟�? - 如果领导同意,且自己评估工作量不大,那就加上 —�?不要过于较真,HR 也不喜欢过于死板的人
    • 如果领导同意,但自己评估工作量有点大,那就和领导说清楚(领导不一定熟悉每一个开发细节)
    • 领导有可能直接不同意
  • 如果确定不接这个需求,如何回绝 PM 呢?
    • 让他发邮件,抄送他领导,以及项目组成员,走正式的需求变更流�? - 一般此�?PM 就退缩了,不会为了这个小需求来发正式的邮件�?- 最后,这样做是为了项目能稳定、按预期完成,否则需求蔓延太多,项目工期、质量都不可�?
      PS. 其实这样�?PM 好对付,怕就怕在中小公司有这样的老板,摊上了也没办法…

如果你项目的 deadline 很紧张,你该如何做?

准备一个工作中具体的例子,使用 STAR 模型讲解,例如:

  • Situation 背景:在 xxx 公司时,有一�?xxx 项目,遇到过 deadline 很紧张的情况
  • Task 任务:客�?老板下令必须�?xxx 时间之前上线,我们要按照这个时间往前推
  • Action 行动/解决方案�? - 和领导沟通,让他帮忙协同其他人力资源(如测试人员),确保所有人都能按计划进�? - 和项目组开会,明确需求范围,列出功能,划分优先级,明确分工,制定开发计�? - 大家在一起集中加班开发,即时沟通,即时调整,快速开发完成,并提交测�?- Result 结果:虽然大家很累、进度优点紧张,但项目最后按计划上线,我们团队也因此更加团结高效

注意事项

  • 所有的冲突,解决方案都会涉�?领导 沟通 优先级 计划 这几个关键词
  • 要提到加班,但不能只有加班。需要的是:有管理能�?+ 加班

介绍一个你最近做过的项目

推荐的表达方�?

  • 项目背景和功能介绍:这是一�?xxx 项目,它服务�?xxx 。它主要包含 a b c 功能/模块�?- 技术栈:说�?2-3 个主要的即可,和 HR 不要说太多技术细节,能体现出技术即�?- 个人的角色和成绩:我是这个项目中的核心前端开发人员,我主要负�?x y z 模块的开发�?- 个人成长:通过开发这个项目,让我掌握了能独立承担项目/模块的能力,希望在未来的工作中继续发挥这方面的价值�?
    PS. 通过介绍项目,来体现自己当前的能�?

说一件最让你有成就感的事�?

准备一个工作中具体的例子,使用 STAR 模型讲解,例如:

  • Situation 背景:介绍项目背景,要让 HR 能听�?- Task 任务:要完成 xxx 目标,而且有很大难�?—�?没难度哪儿来的成就感�?- Action 行动/解决方案:通过 xxx 方式,最终解决了这个问题
  • Result 结果:自己得�?xxx 提升,学会了 xxx 能力

注意事项

  • 一定是和工作相关的,非工作的不要说
  • 说的是一件事,但最后要总结为自己的能力,能做好未来的工�?

说一件最让你感觉失败的事�?

参考上一题�?
虽然做失败了,但让我学到�?xxx ,最终还是要总结为自己能力的提升�?

请用三个词概括自�?

可选的词:计划性 执行力 热情 积极 创造性 极客精神 时间观念强 善于沟通 乐于分享 组织能力 管理能力 专注

你的同事/领导如何评价你?

我看很多同学在简历中写“自我评价”,你就可以把自我评价搬到这里。例�?

  • 工作积极热情
  • 善于团队合作
  • 热爱技�?
    如果有可能,尽量在说每一条的时候举一个例子证明一下�?
    HR 天天听这�?积极 热情 热爱 这些词,耳朵早就听出茧子了,你不说点具体的例子,他们可能都听不进去�?

你业余有什么兴趣爱好?

说几个程序员常见的爱好即可,例如玩游戏、看电影、听歌等�?
不要说太影响工作和加班的爱好,如徒步、骑行、长途旅行等�?

如何主持一次会议?

综合考察你的沟通和组织能力,这也是程序员最欠缺的能力�?

  • 明确会议主题�?todos 和核心参与人
  • 联系核心参与人,协同他们的时间,确定会议时间
  • 发送邮件给全体参会人员,抄送相关领�?- 制定会议议程,主持会议,保证讨论话题的方向(不要蔓延到其他话题),做会议记录
  • 会议结束,整体会议记录和决议,发送邮�?
    PS. 最关键的是:又开始有结束,知道开会干啥,知道开完会有了什么结论�?

谈薪技�?

HR 会把薪资尽量压低,以节省公司成本。而我们需要通过谈判,多争取一些薪资,当然要在合理范围之内�?
::: tip

  • 谈钱必伤感情,不要觉得不好意思,都是为自己争取利益,公平谈判�?- 你担�?HR 拒绝你,其实 HR 也担心你不来(面试几轮,找个合适的候选人也不容易�?
    :::

::: tip
如有疑问,可免费 加群 讨论咨询,也可参�?1v1 面试咨询服务�?专业、系统、高效、全流程 准备前端面试
:::

大厂校招有统一工资标准

大厂会统一秋招、春招,只要面试通过会有统一的工资标准,大约年薪 200k 这个级别

  • 不同公司不一样,例如字节平均薪资就高一�?- 不同岗位不一样,算法、大数据库会高一�?- 不同学历不一样,研究生会高一�?
    这是刚毕业的薪资水平,你未来如何涨薪,就看自己的能力和运气了�?
    一般来说,跳槽涨薪 vs 公司内部涨薪,前者要快很多。但目前就业行情不好,也要谨慎跳槽,千万不要裸辞�?

参考你当前的薪�?

跳槽,一般会在你当前薪资基础上涨�?10-20% 。除非你当前薪资特别低,例如你在二线城市工作,整体薪资水平低�?
PS. 当前就业行情不好,涨幅可能不会很大�?

参考公司规�?

一线城市的大公司薪资水品最高。公司规模越大,薪资水平相对会越高。初创小公司最“穷”且不稳定�?
如果你刚毕业,根据自己的能力,尽量去大规模的公司,别相信什么“小公司锻炼能力”�?

参考市场行�?

前些年我见过从某度跳槽到某滴涨薪 50% 的人,这两年就出现了降薪跳槽的人,以及大量待业人员�?
个人是斗不过环境的,具体来说就是:不要裸辞、不要拒绝外包、抓住任何工作机会�?

参考公司福利,但要认清福利的价�?

如果是大公司,公司福利几乎不用看,基本都不错,而且都是统一标准的�?
如果是中小公司,�?HR 说有 xxx 福利,为了压低一点薪资。此时你问清楚并且算清楚这些福利的具体价值,能抵多少工资�?
不要不好意思,谈钱本来就是伤感情的事儿,大家都是挣去自己的利益,这很正常�?

不要透露底牌,自己说出具体的期望薪资

这是一个非常重要的技巧!!!

�?HR 谈薪时,HR 一般会直接问:你能接受的期望薪资是多少�?—�?HR 在问你的底牌

此时你如果说出来一个具体数,如 20K ,亮了底牌,你大概率就输了�?
正确的回答方式应该是这样

  • 首先自己提前做好调研,查一下当前合理的薪资范围是多少(例如 20-40k),根据城市、公司规模、岗位等
  • 然后�?HR 谈薪时答复:我已经查到这个岗位的薪资�?20-40k ,不知道咱们公司能给到多少?

你要把太极打回去,让 HR 去亮底牌,然后再自己做判断�?

多要现金,还是多要期权?

公司一般会倾向于:多给你期权,少给你现金。所以你应该:多要现金,少要期权�?
当然,如果总包比较多的话,也不可能全要现金,公司没有那么多钱。合理比例即可�?
知乎、脉脉那些总包 100w 200w 的,真假先不说,即便是真的,也大部分都是期权�?

面试官:说说 HTTP1.0/1.1/2.0 的区�?

一、HTTP1.0

HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本

HTTP 1.0 浏览器与服务器只保持短暂的连接,每次请求都需要与服务器建立一个TCP连接

服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求

简单来讲,每次与服务器交互,都需要新开一个连�?

例如,解析html文件,当发现文件中存在资源文件的时候,这时候又创建单独的链�?
最终导致,一个html文件的访问包含了多次的请求和响应,每次请求都需要创建连接、关系连�?
这种形式明显造成了性能上的缺陷

如果需要建立长连接,需要设置一个非标准的Connection字段 Connection: keep-alive

二、HTTP1.1

HTTP1.1中,默认支持长连接(Connection: keep-alive),即在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟

建立一次连接,多次请求均由这个连接完成

这样,在加载html文件的时候,文件中多个请求和响应就可以在一个连接中传输

同时,HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间

同时,HTTP1.1HTTP1.0的基础上,增加更多的请求头和响应头来完善的功能,如下:

  • 引入了更多的缓存控制策略,如If-Unmodified-Since, If-Match, If-None-Match等缓存头来控制缓存策�?- 引入range,允许值请求资源某个部�?- 引入host,实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点

并且还添加了其他的请求方法:putdeleteoptions

三、HTTP2.0

HTTP2.0在相比之前版本,性能上有很大的提升,如添加了一个特性:

  • 多路复用
  • 二进制分�?- 首部压缩
  • 服务器推�?

多路复用

HTTP/2 复用TCP连接,在一个连接里,客户端和浏览器都可�?*同时**发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞�?

上图中,可以看到第四步中cssjs资源是同时发送到服务�?

二进制分�?

帧是HTTP2通信中最小单位信�?
HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,解析起来更高�?
将请求和响应数据分割为更小的帧,并且它们采用二进制编�?
HTTP2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据�?
每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装,这也是多路复用同时发送数据的实现条件

首部压缩

HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发�?
首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更�?
例如:下图中的两个请求, 请求一发送了所有的头部字段,第二个请求则只需要发送差异数据,这样可以减少冗余数据,降低开销

服务器推�?

HTTP2引入服务器推送,允许服务端推送资源给客户�?
服务器会顺便把一些客户端需要的资源一起推送到客户端,如在响应一个页面请求中,就可以随同页面的其它资�?
免得客户端再次创建连接发送请求到服务器端获取

这种方式非常合适加载静态资�?

四、总结

HTTP1.0�?

  • 浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接

HTTP1.1�?

  • 引入了持久连接,即TCP连接默认不关闭,可以被多个请求复�?- 在同一个TCP连接里面,客户端可以同时发送多个请�?- 虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的,服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着
  • 新增了一些请求方�?- 新增了一些请求头和响应头

HTTP2.0�?

  • 采用二进制格式而非文本格式
  • 完全多路复用,而非有序并阻塞的、只需一个连接即可实现并�?- 使用报头压缩,降低开销
  • 服务器推�?

参考文�?- https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE#HTTP/1.0

面试官:如何理解CDN?说说实现原理?

一、是什�?

CDN (全称 Content Delivery Network),即内容分发网络

构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN 的关键技术主要有内容存储和分发技�?
简单来讲,CDN就是根据用户位置分配最近的资源

于是,用户在上网的时候不用直接访问源站,而是访问离他“最近的”一�?CDN 节点,术语叫边缘节点,其实就是缓存了源站内容的代理服务器。如下图�?

二、原理分�?

在没有应用CDN时,我们使用域名访问某一个站点时的路径为

用户提交域名→浏览器对域名进行解释→DNS 解析得到目的主机的IP地址→根据IP地址访问发出请求→得到请求数据并回复

应用CDN后,DNS 返回的不再是 IP 地址,而是一个CNAME(Canonical Name ) 别名记录,指向CDN的全局负载均衡

CNAME实际上在域名解析的过程中承担了中间人(或者说代理)的角色,这是CDN实现的关�?

负载均衡系统

由于没有返回IP地址,于是本地DNS会向负载均衡系统再发送请�? ,则进入到CDN的全局负载均衡系统进行智能调度�?

  • 看用户的 IP 地址,查表得知地理位置,找相对最近的边缘节点

  • 看用户所在的运营商网络,找相同网络的边缘节点

  • 检查边缘节点的负载情况,找负载较轻的节�?- 其他,比如节点的“健康状况”、服务能力、带宽、响应时间等

结合上面的因素,得到最合适的边缘节点,然后把这个节点返回给用户,用户就能够就近访问CDN的缓存代�?
整体流程如下图:

缓存代理

缓存系统�?CDN 的另一个关键组成部分,缓存系统会有选择地缓存那些最常用的那些资�?
其中有两个衡量CDN服务质量的指标:

  • 命中率:用户访问的资源恰好在缓存系统里,可以直接返回给用户,命中次数与所有访问次数之�?- 回源率:缓存里没有,必须用代理的方式回源站取,回源次数与所有访问次数之�?
    缓存系统也可以划分出层次,分成一级缓存节点和二级缓存节点。一级缓存配置高一些,直连源站,二级缓存配置低一些,直连用户

回源的时候二级缓存只找一级缓存,一级缓存没有才回源站,可以有效地减少真正的回源

现在的商�?CDN命中率都�?90% 以上,相当于把源站的服务能力放大�?10 倍以�?

三、总结

CDN 目的是为了改善互联网的服务质量,通俗一点说其实就是提高访问速度

CDN 构建了全国、全球级别的专网,让用户就近访问专网里的边缘节点,降低了传输延迟,实现了网站加�?
通过CDN的负载均衡系统,智能调度边缘节点提供服务,相当于CDN服务的大脑,而缓存系统相当于CDN的心脏,缓存命中直接返回给用户,否则回源

参考文�?

面试官:DNS协议 是什么?说说DNS 完整的查询过�?

一、是什�?

DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器

简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址

  • IP 地址:一长串能够唯一地标记网络上的计算机的数�?- 域名:是由一串用点分隔的名字组成�?Internet 上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识

二、域�?

域名是一个具有层次的结构,从上到下一次为根域名、顶级域名、二级域名、三级域�?..

例如www.xxx.comwww为三级域名、xxx为二级域名、com为顶级域名,系统为用户做了兼容,域名末尾的根域名.一般不需要输�?
在域名的每一层都会有一个域名服务器,如下图�?

除此之外,还有电脑默认的本地域名服务�?

三、查询方�?

DNS 查询的方式有两种�?

  • 递归查询:如�?A 请求 B,那�?B 作为请求的接收者一定要�?A 想要的答�?

  • 迭代查询:如果接收�?B 没有请求�?A 所需要的准确内容,接收�?B 将告诉请求�?A,如何去获得这个内容,但是自己并不去发出请求

四、域名缓�?

在域名服务器解析的时候,使用缓存保存域名和IP地址的映�?
计算机中DNS的记录也分成了两种缓存方式:

  • 浏览器缓存:浏览器在获取网站域名的实�?IP 地址后会对其进行缓存,减少网络请求的损�?- 操作系统缓存:操作系统的缓存其实是用户自己配置的 hosts 文件

五、查询过�?

解析域名的过程如下:

  • 首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表

  • 若没有命中,则继续搜索操作系统的 DNS 缓存

  • 若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己�?DNS 缓存,查找成功则返回结果

  • 若本地域名服务器�?DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查�? - 首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器

    • 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址
    • 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应�?IP 地址
  • 本地域名服务器将得到�?IP 地址返回给操作系统,同时自己�?IP 地址缓存起来

  • 操作系统�?IP 地址返回给浏览器,同时自己也�?IP 地址缓存�?

  • 至此,浏览器就得到了域名对应�?IP 地址,并�?IP 地址缓存�?
    流程如下图所示:

参考文�?- https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F

面试官:说一�?GET �?POST 的区别?

一、是什�?

GETPOST,两者是HTTP协议中发送请求的方法

GET

GET方法请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数�?

POST

POST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或*副作�?

本质上都是TCP链接,并无差�?
但是由于HTTP的规定和浏览�?服务器的限制,导致他们在应用过程中会体现出一些区�?

二、区�?

w3schools得到的标准答案的区别如下�?

  • GET在浏览器回退时是无害的,而POST会再次提交请求�?- GET产生的URL地址可以被Bookmark,而POST不可以�?- GET请求会被浏览器主动cache,而POST不会,除非手动设置�?- GET请求只能进行url编码,而POST支持多种编码方式�?- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留�?- GET请求在URL中传送的参数是有长度限制的,而POST没有�?- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制�?- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息�?- GET参数通过URL传递,POST放在Request body�?

参数位置

貌似从上面看到GETPOST请求区别非常大,但两者实质并没有区别

无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上没有区�?
当不携带参数的时候,两者最大的区别为第一行方法名不同

POST /uri HTTP/1.1 \r\n

GET /uri HTTP/1.1 \r\n

当携带参数的时候,我们都知道GET请求是放在url中,POST则放在body�?
GET 方法简约版报文是这样的

1
2
GET /index.html?name=qiming.c&age=22 HTTP/1.1
Host: localhost

POST 方法简约版报文是这样的

1
2
3
4
5
POST /index.html HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded

name=qiming.c&age=22

注意:这里只是约定,并不属于HTTP规范,相反的,我们可以在POST请求中url中写入参数,或者GET请求中的body携带参数

参数长度

HTTP 协议没有Body�?URL 的长度限制,�?URL 限制的大多是浏览器和服务器的原因

IEURL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支�?
这里限制的是整个URL长度,而不仅仅是参数值的长度

服务器处理长 URL 要消耗比较多的资源,为了性能和安全考虑,会�?URL 长度加限�?

安全

POST GET 安全,因为数据在地址栏上不可�?
然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报�?
只有使用HTTPS才能加密安全

数据�?

对于GET方式的请求,浏览器会把http headerdata一并发送出去,服务器响�?00(返回数据)

对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok

并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一�?

参考文�?

面试官:为什么说HTTPS比HTTP安全? HTTPS是如何保证安全的�?

一、安全特�?

在上篇文章中,我们了解到HTTP在通信过程中,存在以下问题�?

  • 通信使用明文(不加密),内容可能被窃�?- 不验证通信方的身份,因此有可能遭遇伪装

HTTPS的出现正是解决这些问题,HTTPS是建立在SSL之上,其安全性由SSL来保�?
在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功�?

SSL(Secure Sockets Layer 安全套接字协�?,及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协�?

二、如何做

SSL 的实现这些功能主要依赖于三种手段�?

  • 对称加密:采用协商的密钥对数据加�?- 非对称加密:实现身份认证和密钥协�?- 摘要算法:验证信息的完整�?- 数字签名:身份验�?

对称加密

对称加密指的是加密和解密使用的秘钥都是同一个,是对称的。只要保证了密钥的安全,那整个通信过程就可以说具有了机密�?

非对称加�?

非对称加密,存在两个秘钥,一个叫公钥,一个叫私钥。两个秘钥是不同的,公钥可以公开给任何人使用,私钥则需要保�?
公钥和私钥都可以用来加密解密,但公钥加密后只能用私钥�?密,反过来,私钥加密后也只能用公钥解�?

混合加密

HTTPS通信过程中,采用的是对称加密+非对称加密,也就是混合加�?
在对称加密中讲到,如果能够保证了密钥的安全,那整个通信过程就可以说具有了机密�?
HTTPS采用非对称加密解决秘钥交换的问题

具体做法是发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥�?

这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信

举个例子�?

网站秘密保管私钥,在网上任意分发公钥,你想要登录网站只要用公钥加密就行了,密文只能由私钥持有者才能解密。而黑客因为没有私钥,所以就无法破解密文

上述的方法解决了数据加密,在网络传输过程中,数据有可能被篡改,并且黑客可以伪造身份发布公钥,如果你获取到假的公钥,那么混合加密也并无多大用处,你的数据扔被黑客解�?
因此,在上述加密的基础上仍需加上完整性、身份验证的特性,来实现真正的安全,实现这一功能则是摘要算法

摘要算法

实现完整性的手段主要是摘要算法,也就是常说的散列函数、哈希函�?
可以理解成一种特殊的压缩算法,它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹�?

摘要算法保证了“数字摘要”和原文是完全等价的。所以,我们只要在原文后附上它的摘要,就能够保证数据的完整�?
比如,你发了条消息:“转�?1000 元”,然后再加上一�?SHA-2 的摘要。网站收到后也计算一下消息的摘要,把这两份“指纹”做个对比,如果一致,就说明消息是完整可信的,没有被修�?

数字签名

数字签名能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签�?
原理其实很简单,就是用私钥加密,公钥解密

签名和公钥一样完全公开,任何人都可以获取。但这个签名只有用私钥对应的公钥才能解开,拿到摘要后,再比对原文验证完整性,就可以像签署文件一样证明消息确实是你发�?

和消息本身一样,因为谁都可以发布公钥,我们还缺少防止黑客伪造公钥的手段,也就是说,怎么判断这个公钥就是你的公钥

这时候就需要一个第三方,就是证书验证机�?

CA验证机构

数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场

CA 对公钥的签名认证要求包括序列号、用途、颁发者、有效时间等等,把这些打成一个包再签名,完整地证明公钥关联的各种信息,形成“数字证书�?
流程如下图:

  • 服务器的运营人员向数字证书认证机构提出公开密钥的申�?- 数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签�?- 然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一�?- 服务器会将这份由数字证书认证机构颁发的数字证书发送给客户端,以进行非对称加密方式通信

接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,则证明�?

  • 认证服务器的公开密钥的是真实有效的数字证书认证机�?- 服务器的公开密钥是值得信赖�?

三、总结

可以看到,HTTPSHTTP虽然只差一个SSL,但是通信安全得到了大大的保障,通信的四大特性都以解决,解决方式如下�?

  • 机密性:混合算法
  • 完整性:摘要算法
  • 身份认证:数字签�?- 不可否定:数字签�?
    同时引入第三方证书机构,确保公开秘钥的安全�?

参考文�?

面试官:什么是HTTP? HTTP �?HTTPS 的区�?

一、HTTP

HTTP (HyperText Transfer Protocol),即超文本运输协议,是实现网络通信的一种规�?

在计算机和网络世界有,存在不同的协议,如广播协议、寻址协议、路由协议等�?…..

HTTP是一个传输协议,即将数据由A传到B或将B传输到A,并�?A �?B 之间能够存放很多第三方,如: A<=>X<=>Y<=>Z<=>B

传输的数据并不是计算机底层中的二进制包,而是完整的、有意义的数据,如HTML 文件, 图片文件, 查询结果等超文本,能够被上层应用识别

在实际应用中,HTTP常被用于在Web浏览器和网站服务器之间传递信息,以明文方式发送内容,不提供任何方式的数据加密

特点如下�?

  • 支持客户/服务器模�?
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时�?- 无状态:HTTP协议无法根据之前的状态进行本次的请求处理

二、HTTPS

在上述介绍HTTP中,了解到HTTP传递信息是以明文的形式发送内容,这并不安全。而HTTPS出现正是为了解决HTTP不安全的特�?
为了保证这些隐私数据能加密传输,让HTTP运行安全的SSL/TLS协议上,�?HTTPS = HTTP + SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密

SSL 协议位于 TCP/IP 协议与各种应用层协议之间,浏览器和服务器在使�?SSL 建立连接时需要选择一组恰当的加密算法来实现安全通信,为数据通讯提供安全支持

流程图如下所示:

  • 首先客户端通过URL访问服务器建立SSL连接
  • 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户�?- 客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级
  • 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站
  • 服务器利用自己的私钥解密出会话密�?- 服务器利用会话密钥加密与客户端之间的通信

三、区�?

  • HTTPS是HTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的,HTTPS使用了SSL/TLS协议进行了加密处理,相对更安�?- HTTP �?HTTPS 使用连接方式不同,默认端口也不一样,HTTP�?0,HTTPS�?43
  • HTTPS 由于需要设计加密以及多次握手,性能方面不如 HTTP
  • HTTPS需要SSL,SSL 证书需要钱,功能越强大的证书费用越�?

参考文�?

0%