欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【滴滴日常实习-1轮面经】

程序员文章站 2022-04-18 21:55:44
...

滴滴一轮面试,本来应该是线下面试的,题主出差刚回来,又熬了几天夜(苦逼土木人),就选择了线上面试。面试官是个小姐姐,说话很和气,问的问题都比较友好,并且都是按照简历内容信手拈来地提问。

吹水部分

1. 介绍一下自己?

css部分

1. 居中是怎么实现的?
关于水平和垂直方向的布局规则,可以参考我这篇博文:CSS中彻底搞懂盒模型、定位

  • 水平居中:
    • 【行内元素】:text-align : center;
    • 【块元素】:确定了大小的块元素用 margin:0 auto;
    • 【开启了绝对定位且知道元素宽度】:left:50% + margin-left: 负一半的width。举个一目了然的例子:
		    <style>
		        #box {
		            background-color: #bfa;
		            width: 400px;
		            height: 400px;
		            margin: 0 auto;
		            padding: relative;
		        }
		
		        #inner-box {
		            background-color: blue;
		            width: 200px;
		            height: 200px;
		            position: absolute;
		            left:50%;
		            /*往回拉一半的宽度*/
		            margin-left:-100px; 
		        }
		    </style>
		</head>
		
		<body>
		    <div id="box">
		        <div id="inner-box">
		        </div>
		    </div>
		</body>
  • 【开启了绝对定位且元素宽度不确定的】:left:50% + transform:translateX(-50%);。
	    <style>
	        #box {
	            background-color: #bfa;
	            width: 400px;
	            height: 400px;
	            margin: 0 auto;
	            padding: relative;
	        }
	
	        #inner-box {
	            background-color: blue;
	            width: 200px;
	            height: 200px;
	            position: absolute;
	            left:50%;
	            /*往回拉一半的宽度*/
	            transform:translateX(-50%);
	        }
	    </style>
  • 垂直居中:
    • 【行内元素】:line-height 当于父元素 height ;
    • 【开启了绝对定位且知道元素宽度】:top:50% + margin-top: 负一半的height。
    • 【开启了绝对定位且元素高度不确定的】:left:50% + transform:translateY(-50%);。

2. position有哪几种类型?
static,relative,absolute,sitcky,fixed
position:relative和absolute有什么区别?
参考下 这篇博客
首先, 在正常流中的位置存在与否。
其次,relative定位的层总是相对于其最近的父元素,无论其父元素是何种定位方式。相对于static定位以外第一个父元素进行定位。

3. css预处理器用过吗
讲了一些less的特性,sass没用过。

4. 做过移动端适配吗?
感觉是前端必问问题。我扯了一些rem,媒体查询,vm/vh之类的。

js部分

1. js有哪几种变量类型?

2. 如何变量类型判断?

3. 深拷贝和浅拷贝?
这里我提了用JSON序列化再反序列化,即JSON.parse(JSON.stringify(obj)),以及自己手写递归深拷贝,面试官问我这两种方法能不能拷贝对象的函数属性?我说第一种肯定不行,第二种自己手写的可以。
关于深拷贝这篇文章写的很好
4. let和const与var的区别? const声明的对象的属性可以修改吗?
这篇博客写的很简洁

框架部分

  1. vue 生命周期函数说一下?v-if切换是从哪个生命周期函数开始的?
    这块问到v-if的时候博主不会了,因为vue写的不多,以后要加强学习。
    答案在这里

针对做的项目部分

1. nginx 反向代理配置,用什么语法实现本地跨域联调的?

2. 博客项目的前端是原生js写的还是框架?后端呢?是怎么用JS访问mysql数据库的? 数据库为什么要用mysql,有没有了解过其他类型的数据库?
前端和后端都是原生JS写的(美其名曰为了更好地理解机制)。博主用的是const mysql = require('mysql')来访问mysql的。数据库博主只用过关联式的数据库mysql,mongoDB听说过,没有用过。

3. 博客登录为什么要用redis储存session来实现验证用户登录? 尝试过直接把用户信息储存在内存里吗?这样做有什么缺点?
(1) 用户名信息直接暴露在HTTP请求里很危险,容易被人抓包;
(2) session访问频繁,对性能要求更高,redis用内存来做存储,比sql效率要高很多。
(3) 至于断电丢失不好恢复的问题,可以不用太多考虑,最差的情况让用户再登录一次就是了。
(4) 相比于mysql中存的大数据,session存的是轻量化的id和用户名,所以不会有太多储存负担。

为什么不把登录信息直接存到node进程内存里?
(1) 进程内存有限,如果访问量过大,溢出了,服务器可能就5xx了。
(2) 服务器正式上线都是多进程,进程之间的内存是无法共享的,因为登录信息会被分割成一个个孤岛,无法相互访问。

代码考察部分

1. 爬*(一道easy题目)
LeetCode爬*
这里博主拉跨了,用的没有记忆化搜索的DFS…问到时间复杂度的时候还不是很确定…
面试完试了一下,写的代码在LeetCode上只能通过一半的测试用例。关键是3个月前我还用DP提交过这题。

2. JS数组去重。
这里博主也拉跨了,因为没用JS刷题,用的C++,所以JS的Array的API都不太会用…好在最后勉强写出来了…
答案在这里

以上,希望能帮助到你。

相关标签: 前端面试 面试