这是我前端第一面,献给了阿里钉钉部门,小姐姐很好很温柔,整个面试体验很好,但自己确实比较菜,简历面都挂了,重新整理心情,好好复盘一下面试内容;
大家面试前一定要提前演练一下,推荐面对镜子自己对自己说一下,我当时太紧张有点卡壳。。。
我当时在B站看到有一种自我介绍思路还挺牛的,大家也可以参考一下,就是把自己的人生当成游戏,自己就是从新手村不断打怪升级的过程,然后才走到面试这一步,只不过你要把每一步都和职业发展联系在一起;
B站推荐视频
其实前面几个问题都是围绕着简历来问的,后面才开始问技术问题;
我本科是在湖南,研究生是在广东,所以面试官问有没有意向来江浙沪,大家可以打消面试官的疑虑,最好说有,然后说明理由,可以说有家人在那边啥的;
最好要说有,不然不是浪费面试官时间嘛
可以使用javascript中的Date对象来格式化时间戳。具体步骤如下:
getFullYear()
获取年份,getMonth()
获取月份(注意获取的月份是0-11,需要加1),getDate()
获取日期,getHours()
获取小时,getMinutes()
获取分钟,getSeconds()
获取秒数;function formatTimestamp(timestamp) {
const date = new Date(timestamp);
const year = date.getFullYear().toString().padStart(4, '0');
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
const hours = date.getHours().toString().padStart(2, '0');
const minutes = date.getMinutes().toString().padStart(2, '0');
const seconds = date.getSeconds().toString().padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
// 示例用法
const timestamp = 1615150800000; // 时间戳:2021-03-08 08:00:00
const formattedTime = formatTimestamp(timestamp);
console.log(formattedTime); // 输出 "2021-03-08 08:00:00"
JavaScript 中还有很多第三方库可以用来格式化日期时间,Moment.js
const moment = require('moment');
const timestamp = 1615150800000; // 时间戳:2021-03-08 08:00:00
const formattedTime = moment(timestamp).format('YYYY-MM-DD HH:mm:ss');
console.log(formattedTime); // 输出 "2021-03-08 08:00:00"
day.js
const dayjs = require('dayjs');
const timestamp = 1615150800000; // 时间戳:2021-03-08 08:00:00
const formattedTime = dayjs(timestamp).format('YYYY-MM-DD HH:mm:ss');
console.log(formattedTime); // 输出 "2021-03-08 08:00:00"
用localstorage去存储,设置一个属性的值为空,当用户访问过了,就设置成有值,通过判断这个属性是否有值,有值就说明已经访问过了,就不再展示新手引导页面;
不同浏览器无法共享localstorage和sessionstorage的值,相同浏览器下,如果是同源窗口(协议、域名、端口一致),不同页面可以共享localStorage,Cookies值,通过跳转的页面可以共享sessionStorage值。
生命周期不一样,localStorage:localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失。localStorage除非主动删除数据,否则数据永远不会消失。
sessionStorage的生命周期是在仅在当前会话下有效。sessionStorage引入了一个“浏览器窗口”的概念,sessionStorage是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源另一个页面,数据依然存在。但是sessionStorage在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage也是不一样的。
应用场景:localStoragese:常用于长期登录(+判断用户是否已登录),适合长期保存在本地的数据。sessionStorage:敏感账号一次性登录;
存储位置:localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信。大小都是5MB;
具体可以看看这篇文章:
JS 获取当前浏览器类型(IE、Chrome、Edge、Firefox、Opera、UC、QQ)
forEach()方法不会返回执行结果,而是undefined。也就是说,forEach()会修改原来的数组。而map()方法会得到一个新的数组并返回。
使用弹性布局实现垂直左右居中:
display:flex; 设置.wrap为弹性布局
justify-content:center;定义项目在主轴(水平方向)上居中对齐
align-items:center;定义项目在交叉轴(垂直方向)上居中对齐
display:table-cell
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Demo001_displayTable</title>
<style>
/*** table-cell middle center组合使用 ***/
.cell {
display: table-cell;
vertical-align: middle;
text-align: center;
width: 240px;
height: 180px;
border:1px solid #666;
}
</style>
</head>
<body>
<div class="cell">
<p>我爱你</p>
</div>
<div class="cell">
<p>我爱你</p><p>亲爱的中国</p>
</div>
<div class="cell">
<p>我爱你</p><p>亲爱的中国</p><div style="width:100px;height:50px;border:1px solid #ccc;display:inline-block">div(inline-block)</div>
</div>
</body>
</html>
transform:translate(-50%,-50%)
.content {
padding:10px;
background:green;
color:#fff;
position:absolute;
top:50%;
left:50%;
border-radius: 5px;
-webkit-transform: translate(-50%,-50%);
-moz-transform: translate(-50%,-50%);
transform:translate(-50%,-50%);
}
我觉得这篇文章写的还可以,大家也可以参考一下这篇文章:
从一道经典的前端面试题——谈前端性能优化
function Num1(num1,num2){
var newNum1=num1.flat(Infinity);
var newNum2=num2.flat(Infinity);
var newNum=newNum1.concat(newNum2);
var result=[];
for(var i=0;i<newNum.length;i++){
if(!result.includes(newNum[i]){result.push(Number(newNum[i]))}
else{continue;}
}
var result=(result.sort(a,b)=>a-b));
return result;
}
<!--
* @Descripption:
* @version:
* @Author: LiYuan
* @Date: 2023-04-16 20:10:33
* @LastEditors: LiYuan
* @LastEditTime: 2023-04-16 22:41:10
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head>
<body>
<div id="like_button_container" style="height: 200px;"></div>
<script type="text/babel">
function Div1(props){
const input1= React.useRef(0);
const input2=React.useRef(0);
const [state1,setState1]=React.useState(false);
const [state2,setState2]=React.useState(0);
const addNumber=(input1,input2)=>{
console.log(input1)
if(Number(input1.current.value)!==NaN&&Number(input2.current.value!==NaN)){
setState1(false);
var sum=Number(input1.current.value)+Number(input2.current.value);
setState2(sum);
}else{
setState1(true);
}
}
if(state1){
return <div>
<input ref={input1} />
<input ref={input2}/>
<button onClick={()=>addNumber(input1,input2)}>相加</button>
<p>输入的必须是数字</p>
</div>
}else{
return <div>
<input ref={input1} type='text'/>
<input ref={input2} type='text'/>
<button onClick={()=>addNumber(input1,input2)}>相加</button>
<p>{state2}</p>
</div>
}
}
const domContainer = document.querySelector('#like_button_container');
ReactDOM.render(<Div1/>,domContainer);
</script>
</body>
</html>