今天进行了有赞三面和四面以及HR面,记录下面试官问到的问题

0. 选择题:CND的作用有哪些?

A. 缓存

B. 资源合并

C. 就近访问

我的选择:A、C

面试官问:什么是就近访问?

我的回答:我们知道,网络有很多节点,一个请求走过的节点越多,那么这个请求就越慢,哪怕每个节点都很快,物理距离也会提高网络延时,光速虽然很快,但是传输也是需要时间的

所以CDN解决了就近访问的问题,CDN叫做内容分发网络,他是一个网络,当我们请求一个资源时,会在最近的节点返回资源(如果有的话),这样就很快

面试官问:什么是缓存?

我的回答:因为请求的资源在CDN上保存了一个副本,这个副本就是缓存,当一个用户请求了一个资源,被CDN节点所缓存,那么另外一个用户也要请求这个资源,CDN会直接把缓存返回。如果CDN缓存过期,那么CDN会去真正的资源服务器去拿资源,这个过程我们称之为「CDN回源」

面试官问:客户端有缓存吗?

我的回答:当然有,浏览器有强缓存和协商缓存(不知道面试官为什么没有针对这个点展开再问)

面试官问:为什么没有资源合并?

我的回答:可能有资源合并,但这属于CDN提供的增值服务,例如example.com/a.js,b.js 通过这种方式,CDN会把两个js文件merge然后返回。有些CDN服务商会提供类似的功能,但是这不属于CDN的标准功能,所以我没有选B

1. 请画出下面的布局(容器宽度无限)

.a {

color: red;

font-size: 20px;

}

.b {

color: antiquewhite;

float: left;

}

.c {

color: aqua;

float: left;

}

.d {

color: blanchedalmond;

}

aaa

bbb
ccc
ddd

我的回答:

aaa

dddbbbccc

我的解释:

因为.b和.c都浮动了,所以脱离文档流,但是所以两者会新起一行,然后当float元素左边遇到非float元素是会挨着它

正确的答案:

bbbcccaaa

ddd

2. 请描述下列选择器的优先级

#id {

color: blue;

}

.a.b {

color: cadetblue;

}

div {

color: chartreuse !important;

}

div

我的回答:!important > 内联 > id > class

面试官接着问,我们常说的优先级算法是,id是100,class是10,tag是1,那么如果我用11个class作为选择器,是否能覆盖id?

我的回答:这个我不确定,以前看过css selector规范,对算法有详细的描述,不过现在确实忘了

3. 使用ws实现fetch,并按照原来的顺序返回

面试官问:比如有十次fetch调用,其顺序是0,2,3...9,但是服务端的返回可能是8,0,2,9,10,5...3,也就是说请求和响应的顺序是不对应的,怎么让其顺序对应起来?

我的回答:在发请求时,在params中添加一个额外的记录顺序的属性sequence,初始值是0,每次发送sequence++,发送完毕,会初始化一个长度为sequence的稀疏数组

然后服务端接收到请求以后,取出params中的sequence,并原样放入response中

前端收到返回以后,取出sequence的值,例如sequence = 5,那么就把稀疏数组的第5个元素填入response值[ , , , , ,res, , , , ]

等10个请求全部返回,稀疏数组就会被填满,当填满时,在按照顺序执行callback,把每个res作为参数传给callback执行

4. 设计一个可编辑excel表格

形如:

A

B

C

1

AAA

BBB

2

DDD

3

CCC

当我点击某个单元格时,变为可编辑状态,在样式上体现出来,比如边框加粗等

我的回答:

一个单元格的坐标是(A, 1), (B, 2) 这样

然后可以用二维数组来定义数据结构,但是如何定位一个好的数据结构?让处理、后续的数据merge更方便呢?

我想到两个数据结构,第一个是二维数据[[A, B, C], [1, AAA, BBB], [2, , DDD], [3, CCC, ]],然后表格也要做懒加载,因为表格很大,不可能一次性返回所有的数据,比如我左右滚动到了C列,那么后续的列D、E、F...该怎么加载呢?需要计算下当前所在的行和所在的列,然后把表格右下角的单元格坐标传给服务端,服务端根据算法生成数据:[D: { 1: XXX, 2: YYY... }, E: { 1: null, 2: ZZZ ... }, ...]

如果我上下滚动到第3行,在往下滚动的话,需要加载4、5、6...等行,把左下角的单元格坐标传递给服务端,服务端根据算法生成数据:[[4, XXX, YYY, ...], [5, null, UUU, ...], ...]

然后把根据服务端下发的数据,进行dom操作,把新生成的dom插入进去即可

我想到的另外一个数据结构是,根据坐标放入一个大数组中,例如[{'A:1' : AAA}, {'A:2' : AAA}, {B:2': XXX}, ...],key作为坐标,value作为单元格的值,但是有一个问题,可能会有数据冗余,因为A出现很多次,但是这些都是高度结构化、同构化的数据,gzip压缩率会很高,所以数据体积不是问题

面试官又问:

那么前端应该怎么写?

我的回答:

前端用flex和table布局皆可,但是我倾向于用table布局,因为这个是符合语义化的,excel表,就是一个表格,所以用table是合适的

然后面试官问,那么我如何找到要编辑的单元格呢?

我的回答:

直接根据坐标找即可

面试官又问:

会有什么问题吗?

我的回答:

应该没有

其实后面想想,我应该说的更多一些,比如如何实现单元格的可编辑?editable=true了解下?这些都是知道的,但是当时没有表达出来

5. java的面向对象和js的面向对象有什么区别

我的回答:

java的面向对象是基于类的,而js的面向对象是基于原型的,那么什么是基于类,什么是基于原型呢?我举一个生活化的例子来说,比如要盖一座大楼,如果有图纸,按照这个图纸来建造的大楼,我们称之为基于类的,图纸就是类,是一个模子,按照这个模子就能实例化一个对象,即大楼。

js是js之父Brendan Eich(布兰登·艾奇),用了10天的时间设计出来的,所以比较糙,面向对象并不是一个标准的实现(即基于类的实现)

那么js基于原型是怎么做的?原型就是,我看到一座楼很好看的大楼,然后按照这座很好看的大楼作为原型新建造一座大楼,那么这个就属于基于原型的面向对象。

当然,以一个大楼作为原型建造的另外一座大楼,如果要深入进去,可能会发现两个大楼有区别,但是js是鸭子类型,我们只关心我们关心的部分,如果两座大楼我们关心的部分,比如都是钢筋混凝土结构,都是两梯四户,内部构造和格局也一样,一些不关心的部分,比如墙体的颜色、用的是LED灯还是白炽灯等我们会忽略掉这些不关心的部分。。所以鸭子类型的意思是,如果一个对象长得像鸭子、走起路来像鸭子、并且会呱呱叫,那么我们认为它就是一只鸭子(其实可能是条狗)

然后面向对象有三大概念封装、继承、多态,java都有,但是js只有封装、继承,因为js是弱类型语言,所以没办法使用方法签名来区分函数的重写,所以就没有行为的多态,还是因为没有类型,所以也没有类似于Java中的list list = new ArrayList()的多态

面试官接着问:

什么是封装?

我的回答:

封装就是把数据和行为封装到一个对象中

面试官又问:

这是你理解的封装吗?

我的回答:

是的

点评:我的回答其实没有错,但是我可以更进一步这样回答:面向对象层面的封装就是这个意思,但是我们编程时,即便不是面向对象也常常用封装这个词,比如一段代码很多地方调用,那么我们常常会说,要把这段代码「封装」起来,这个是另外一个层面的封装了

6. 总结

自己主要在关注js方面,包括架构、项目等问题,css是自己的一个薄弱点,后面要进行专题强化

有赞Java面试经验_有赞面试记录二相关推荐

  1. 大华java面试经验_大华面试(Java 基础)

    7-17 大华一面(java 基础) 1. 讲一下 java 和其他语言的区别,说下 java 的平台无关性,如何做到一次编译,到处运行 关于java 的特性,可以从 java 的优点来说. java ...

  2. java开发五年面试经验_只有经验丰富的开发人员才能教您有关Java的5件事

    java开发五年面试经验 深入研究Java之前需要了解的所有内容的概述 有许多工具,方法,环境和功能会改变您处理代码的方式,而这些通常是在学年期间不会遇到的. 虽然它在Java开发世界中迈出了第一步, ...

  3. 一位资深Java的阿里系公司实战面试经验,套路还是面试官的多

    马老师说过,员工的离职原因很多,只有两点最真实: 1.钱,没给到位 2.心,受委屈了 以下是占小狼的一些实战面试经验分享,希望能帮助你们顺利拿到理想Offer! 项目经验 面试官在一开始会让你进行自我 ...

  4. python人工智能方向面试准备_关于机器学习面试的经典题目(面试经验和建议)...

    今年年初以来,作者一直在印度找数据科学.机器学习以及深度学习领域的工作.在找工作的这三十四天里,他面试了8到10家公司,其中也包括初创公司.基于服务的公司以及基于产品的公司.作者希望他的面试经验能够为 ...

  5. 网易python面试经验_【网易游戏Python面试】第一轮hr电话面试-看准网

    10.21终面已参加,希望能顺利通过终面拿到offer-❤一共三轮,电话面试+笔试+视频面试,视频面试3V110月19日投的新媒体运营的简历,HR说因为是周末,等工作日再联系我,在周一下午三点我接到了 ...

  6. 腾讯面试官分享面试经验,如何考察面试者技术及个人综合素质,给正在面试的你一点建议

    前言 这两天小编有幸结识了一位腾讯的大佬,并面试过很多人,遂向他请教了站在面试官角度上是如何看待面试这件事的.接下来文章将会以第一口吻为大家分享大佬的面经. 一般面试(无论几轮),我都会从三个角度来考 ...

  7. 面试常见问题_软件实施工程师面试中的常见问题都有哪些呢?

    软件实施工程师面试中的常见问题都有哪些呢? 首先需要看你自己找什么样的工资,是新手呢 还是老手呢?对于软件实施的一些新手来说,那么相对应来说要看重的是人品的一个问题,因为毕竟他们家的是新手,所以对于一 ...

  8. 面试题目_数据分析SQL面试题目9套汇总

    金九银十又是找工作的好季节啊,最近不少数据蛙数据分析社群同学,问到一些面试数据分析时的SQL题目,所以就结合大家的面试题目以及工作场景给大家总结了一些经典题目.同时也特别感谢001号同学和002号同学 ...

  9. 微信视频号Android面试经验,如何通过视频面试拿下offer?我们来给你支招啦!

    原标题:如何通过视频面试拿下offer?我们来给你支招啦! 香港留学的面试有好几种常见方式,包括有亲身到学校现场面试.Skype视频面试.QQ视频面试和微信视频面试等.这段时间迎来了香港留学的申请高峰 ...

最新文章

  1. git rollback代码都没了_Git使用总结
  2. 提升网站在搜索引擎中的排名需要技巧性操作
  3. Spring - Java/J2EE Application Framework 应用框架 第 8 章 源代码级的元数据支持
  4. linux python3 pip3_linux环境下安装python3以及pip3
  5. 日志管理:(二)og4j.xml警告log4j:WARN The content of element type log4j:configuration m
  6. 设计模式 ( 十七 ):Observer 观察者模式 -- 行为型
  7. GoogleNet网络详解与keras实现
  8. WPF xml配置文件里面的大于小于号转义
  9. Deep Learning 【Nature review】
  10. openssl paho.mqtt交叉编译
  11. idea java gitignore,关于idea的gitignore文件编写及解决ignore文件不生效问题
  12. 怎么轻松学JAVA(三个月拿实习Offer):小猿的JAVA后端之路(持续更新)
  13. 安卓dj专业打碟机软件_djay Pro 2 for mac(专业DJ打碟软件)
  14. 全国各地迎来降雪,我们准备了五件发热好物,让你暖暖度过这个寒冬 | 钛空实测
  15. python 曲线平滑_曲线平滑(smoothing)
  16. 机房管理系列之电话交换机
  17. log4j2的一些配置,为某个类某个方法单独文件打印日志,定时删除日志和springboot的logback日志单独类打印
  18. word批量转换为html,批量Word转HTML – ConvertWordToHTML[Update: Word转换工具]
  19. 一个人、一本书、一杯茶、一场梦
  20. 浮点尾数特性详解(02325计算机系统结构)

热门文章

  1. 数据库学习之sql语句基础
  2. 图片加载失败后---加载默认图片
  3. 【人工智能项目】ImageNet数据集介绍以及数字图像处理技术
  4. JS实现curry(柯里化)的四种简单方式
  5. 威客---猪八戒http://www.zhubajie.com/
  6. 头条百科怎么创建才容易通过,上头条百科的技巧
  7. 一周技术思考(第33期)-为什么会有高可用的问题?
  8. SpringBoot启动报错Could not resolve placeholder ‘XXX.XXX‘ in value
  9. 月球绘画软件测试,宇宙飞船简笔画:第一个登上月球的宇航员
  10. iOS 学习之旅 - OC 篇