面试官出了一道题(不会很难),你来得到结果,然后叫使用另一种方法,另一种思路实现,最后再叫简化代码,将代码压缩到使用一行就实现功能。这里面试官主要是看看我写代码的习惯和思路。
=====================================================================
第一次的面试官面试时面了我一个多小时,大概就是半个小时JS基础的考察加上半小时手写代码的考察,JS基础部分就不在这里总结了,推荐大家面试前一定多看看《你不知道的Javascript上册》
,下面说说第一次的几个手写题和后面第二次的一些项目上被挑出来的缺点,与改进。版本号比较的就不写了,这是一个面试中用于层层递进的考察题。
题目:1 <= s.length <= 3 * 105, s 由整数和算符 ('+', '-', '*', '/') 组成,中间由一些空格隔开 s 表示一个 有效表达式 表达式中的所有整数都是**非负整数**,且在范围 [0, 231 - 1] 内 题目数据保证答案是一个 32-bit 整数。
思路:我们可以用一个栈,保存这些(进行乘除(分优先级)运算后的)整数的值。对于加减号后的数字,将其直接压入栈中;对于乘除号后的数字,可以直接与栈顶元素计算,并替换栈顶元素为计算后的结果。
var calculate = function(s) {
// s=s.trim();//去除两边的空格
const stack=[];//数值栈
let sign=‘+’;//符号
let ans=0;//累加和
s = s.replace(/\s/g, ‘’)
for(let i=0 ; i<s.length ; i++ ){
let num =‘’;
//判断是否是符号
if(s[i]<‘0’){
sign=s[i];
}else{
while(s[i]>=‘0’&&i<s.length){
num=num+s[i];
i++;//这里是用于组合两位数以上的值
}
i–;//如果上面跳出来了就多了一次,最大是s.length
//接下来,把数据压入栈
num=Number(num);
switch(sign){
case ‘+’:stack.push(num);
break;
//减法化为负数
case ‘-’:stack.push(-num);
break;
//乘除就与栈顶元素进行运算再压入栈
case ‘*’:stack.push(stack.pop()*num);
break;
case ‘/’:
stack.push(stack.pop() / num | 0);
//注意这|的用法,它能得到一个整数
}
}
}
//最后只需要累加
while(stack.length){
ans+=stack.pop();
}
return ans;
};
复制代码
抛出张图:
这里个人主页我用了flex布局使头像和用户名位于同一行,但是屏幕宽度发生变化后,圆形头像变成了椭圆形。面试官老师就叫我改属性解决这个问题。(这个页面的图我也是切的过于粗暴,惭愧惭愧)
到这里就不得不多说一句,flex属性一定要烂记于心。。。因为我的页面用的都是antd
的UI组件,刚开始我还以为是组件的什么属性没有设置好,就去antd
文档那看,最后没发现问题,然后面试官就引导我到页面使用浏览器的开发者工具来检查,最后发现是flex的属性flex-shrink
的问题,于是给头像盒子加了个flex-shrink:0
,使头像变回圆形(但还是存在很多问题的,比如头像变回了圆形却没有同步缩小,屏幕变小了,头像大小却没变)。
这里介绍下flex-shrink
属性:
flex-shrink
(定义了项目的缩小比例)
属性值:任意正数值,小数,整数,负值是不被允许的
。默认为1
默认为1,即如果空间不足,该项目将缩小。
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。
如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
注意:flex-shrink的宽度的缩小的分配是使用加权运算的。
然后还有一点,就是我项目的首页的侧边栏的标签,上下挨的太近了。
于是调了下margin-top值。
项目在介绍后就给现场改了下这些错,我的项目还是太糙了,做一个项目一定要奔着能拿出来用的想法去,多方面都要考虑到位。
题目:
这道题不难,面试官想看看我们的代码习惯了思路怎么样。
- 第一步,面试官叫我通过
'a.b.c'
与obj得到c的值。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
TCP协议
- TCP 和 UDP 的区别?
- TCP 三次握手的过程?
- 为什么是三次而不是两次、四次?
- 三次握手过程中可以携带数据么?
- 说说 TCP 四次挥手的过程
- 为什么是四次挥手而不是三次?
- 半连接队列和 SYN Flood 攻击的关系
- 如何应对 SYN Flood 攻击?
- 介绍一下 TCP 报文头部的字段
- TCP 快速打开的原理(TFO)
- 说说TCP报文中时间戳的作用?
- TCP 的超时重传时间是如何计算的?
- TCP 的流量控制
- TCP 的拥塞控制
- 说说 Nagle 算法和延迟确认?
- 如何理解 TCP 的 keep-alive?
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
浏览器篇
- 浏览器缓存?
- 说一说浏览器的本地存储?各自优劣如何?
- 说一说从输入URL到页面呈现发生了什么?
- 谈谈你对重绘和回流的理解
- XSS攻击
- CSRF攻击
- HTTPS为什么让数据传输更安全?
- 实现事件的防抖和节流?
- 实现图片懒加载?
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算