先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
‘①’,
‘②’,
‘③’,
‘④’,
‘⑤’,
‘⑥’,
‘⑦’,
‘⑧’,
‘⑨’,
‘⑪’,
‘⑫’,
‘⑬’,
],
Allcourses:‘’,
time:[“周一”,“周二”,“周三”,“周四”,“周五”,“周六”,“周日”],
bgColor:[
[“#AE91D6”,“#34CED9”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],
[“#F97885”,“#34CED9”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],
[“#F97885”,“#34CED9”,“#F97885”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],
[“#F97885”,“#34CED9”,“#34CED9”,“#AE91D6”,“#FADB36”,“#F97885”,“#64B9FE”],
[“#F97885”,“#34CED9”,“#64B9FE”,“#34CED9”,“#FADB36”,“#34CED9”,“#64B9FE”],
[“#F97885”,“#64B9FE”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],
[“#F97885”,“#34CED9”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],
[“#F97885”,“#34CED9”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”]
],
},
};
},
methods: {
showPopup() {
this.show = true;
},
onClickLeft() {
this.$router.back();
},
onClickRight() {
},
onChange(picker, value, index) {
Toast(当前值:${value}, 当前索引:${index}
);
this.weekDay = value;
}
},
created(){
this.$axios.get(“/api/ClassInfo”)
.then((data)=>{
this.classTableData.Allcourses = data.data.msg;
});
},
mounted(){
this.weekDay = 第${TodayInfo("2019/9/4").week}周
;
},
computed:{
…mapState([‘allCourse’])
},
}
=========================================================================
个人界面完成的比较粗糙
没啥技术含量
直接亮代码
<van-nav-bar
class=“header”
title=“个人中心”
left-arrow
/>
<img :src=“userInfoAvatar” alt=“” @click=“changeAvatar”>
{{userInfo.name}}
微信号:{{userInfo.account}}
<van-grid-item
v-for=“(item,index) in orderData”
:key=“index”
:icon=“item.icon”
:text=“item.title”
/>
这里主要难题是点击头像课以更换自己的头像
,更换头像页面比较随便
我尚且有一丝不好意思展示,但不得不展示
<van-nav-bar
title=“更换头像”
left-text=“返回”
left-arrow
@click-left=“onClickLeft”
/>
这里主要难题是点击头像课以更换自己的头像,采用的方法是用:每次更换头像时,把传上去的图骗保存到服务器,服务器,然后
这里写的是图片在服务器的位置(服务器有个路由专门返回头像)。(这是我个人拙略的想法)。但是这样造成一个问题,就是回来到个人中心界面的时候,更换的新照片没有显示出来,还是原来的头像,解决这个方法采用的是,每次没到更换头像后,返回时,让他自动刷新一个,还好有这个
window.location.replace(“/mine”)
返回时会自发地刷新
=========================================================================
<a href=“javascript:;” :class=“{current: loginMode}” @click=“dealLoginMode(true)”>登陆
<a href=“javascript:;” :class=“{current: !loginMode}” @click=“dealLoginMode(false)”>注册
<img src=“./images/hide_pwd.png” :class=“{on: pwdMode}” @click.prevent=“dealPwdMode(false)” alt=“” width=“20”>
<img src=“./images/show_pwd.png” :class=“{on: !pwdMode}” @click.prevent=“dealPwdMode(true)” alt=“” width=“20”>
<button class=“login-submit” @click.prevent=“login”>登录
==============================================================================
const express = require(‘express’);
const router = express.Router();
const conn = require(‘./…/db’);
const bcrypt = require(“bcryptjs”);
const jwt = require(“jsonwebtoken”);
/**
- 返回头像
*/
router.get(“/albums/head_pic/*”,function (req,res,next) {
res.sendFile( “D:\Vuestudy\mycurriculum\” + “/” + req.url );
});
/**
-
@route POST api/users/test
-
@desc 返回的请求的json数据
-
@access public
*/
router.post(“/register”,(req,res)=>{
let selectSql = SELECT * FROM user_data WHERE account = '${req.body.account}'
;
conn.query(selectSql,function (err,result) {
if (result.length>0){
res.json({“err_code”:0,msg:“该账户已被注册”})
}else{
//加密
let User={
password:req.body.password
};
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(User.password, salt, (err, hash)=> {
if(err) throw err;
User.password = hash;
// console.log(password);
let addSqlParams = [req.body.account,User.password,req.body.name];
let addSql = ‘INSERT INTO user_data(account,password,name) VALUES(?,?,?)’;
conn.query(addSql,addSqlParams,function (err, result) {
if(err){
res.end(“注册失败”);//如果注册失败就给客户端返回0
return;//如果失败了就直接return不会继续下面的代码
}
res.end(“注册成功”);//如果注册成功就给客户端返回1
});
});
});
}
});
});
/**$登录接口
-
@route POST api/users/login
-
@desc 返回token
-
@access public
*/
router.post(“/login”,(req,res)=>{
const account = req.body.account;
const password = req.body.password;
let selectSql = SELECT * FROM user_data WHERE account = '${req.body.account}'
;
conn.query(selectSql,function (err,result) {
if (result.length===0){
res.json({“err_code”:0,msg:“该账户不存在”})
}else{
console.log(result);
bcrypt.compare(password,result[0].password)
.then(isMatch =>{
if(isMatch){
const rule = {Id:result[0].Id,account:result[0].account,avatar: result[0].avatar};
jwt.sign(rule,“secret”,{expiresIn:3600},(err,token)=>{
if (err) throw err;
res.json({
success_code:true,
token:"Bearer "+token
})
});
// res.json({msg:“sucess”})
}else{
return res.json({err_code:0,msg:“密码或账号不对”})
}
})
}
});
});
/**
-
获取个人信息
-
@type {Authenticator|Passport}
*/
const passport = require(“passport”); //引入passport中间件
router.get(“/current”,passport.authenticate(“jwt”,{session:false}),(req,res)=>{
// console.log(req);
res.json({
Id:req.user.Id,
name:req.user.name,
account:req.user.account,
avatar:req.user.avatar,
bgImg:req.user.bgImg
})
});
/**$登录接口
-
@route POST
-
@desc 更改头像
-
@access private
*/
router.post(“/changeAvatar”,passport.authenticate(“jwt”,{session:false}),(req,res)=>{
console.log(“sda”);
let base_64_url = req.body.avatar;
let fs = require(“fs”); // 引入fs模块
let path = ‘./albums/’ + ‘/head_pic/’ + req.user.account +‘.jpg’;//路径从app.js级开始找–
基础面试题
主要内容包括:HTML,CSS,JavaScript,浏览器,性能优化等等
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
account = ‘${req.body.account}’`;
conn.query(selectSql,function (err,result) {
if (result.length===0){
res.json({“err_code”:0,msg:“该账户不存在”})
}else{
console.log(result);
bcrypt.compare(password,result[0].password)
.then(isMatch =>{
if(isMatch){
const rule = {Id:result[0].Id,account:result[0].account,avatar: result[0].avatar};
jwt.sign(rule,“secret”,{expiresIn:3600},(err,token)=>{
if (err) throw err;
res.json({
success_code:true,
token:"Bearer "+token
})
});
// res.json({msg:“sucess”})
}else{
return res.json({err_code:0,msg:“密码或账号不对”})
}
})
}
});
});
/**
-
获取个人信息
-
@type {Authenticator|Passport}
*/
const passport = require(“passport”); //引入passport中间件
router.get(“/current”,passport.authenticate(“jwt”,{session:false}),(req,res)=>{
// console.log(req);
res.json({
Id:req.user.Id,
name:req.user.name,
account:req.user.account,
avatar:req.user.avatar,
bgImg:req.user.bgImg
})
});
/**$登录接口
-
@route POST
-
@desc 更改头像
-
@access private
*/
router.post(“/changeAvatar”,passport.authenticate(“jwt”,{session:false}),(req,res)=>{
console.log(“sda”);
let base_64_url = req.body.avatar;
let fs = require(“fs”); // 引入fs模块
let path = ‘./albums/’ + ‘/head_pic/’ + req.user.account +‘.jpg’;//路径从app.js级开始找–
基础面试题
主要内容包括:HTML,CSS,JavaScript,浏览器,性能优化等等
[外链图片转存中…(img-aoLn32Q5-1713609568006)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-kNTDHZhG-1713609568006)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!