2024年Web前端最全Day198(4),2024年最新字节跳动的面试

最后

正值招聘旺季,很多小伙伴都询问我有没有前端方面的面试题!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

前端资料图.PNG

name:‘UserAdd’,//暴露组件

data() {

return {

user:{},

}

},

methods: {

saveUserInfo(){

console.log(this);

//发送aixos请求

let _this= this;

this.$http.post(“url”,_this.user).then(function(resp){

})

}

},

}

  • 注册组件router/index.js

添加到User组件下的,成为子组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2igTiWgR-1613820168996)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220115200487.png)]

  • 创建模拟接口

http://rap2api.taobao.org/app/mock/277648/user/add

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-igURxkzJ-1613820168997)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220115250907.png)]

  • 测试saveUserInfo()函数,是否可以接收到接口返回的值

methods: {

saveUserInfo(){

console.log(this);

//发送aixos请求

let _this= this;

this.$http.post(“http://rap2api.taobao.org/app/mock/277648/user/add”,_this.user).then(function(resp){

console.log(resp);

})

}

},

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kcmst9O6-1613820168999)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220115647603.png)]

  • 加入切换路由功能

saveUserInfo(){

console.log(this);

//发送aixos请求

let _this= this;

this.$http.post(“http://rap2api.taobao.org/app/mock/277648/user/add”,_this.user).then(function(resp){

console.log(resp);

if(resp.data.success){

_this.$router.push(“/user”); //切换路由

}

})

}

发现路由确实切换了,但是没有发起findAll查询所有的axios请求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-enGpH5qb-1613820169000)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220120228545.png)]

  • 给user.vue组件加入监听路由

watch:{ //用来监听

$route:{

handler: function(val,oldval){ //参数1:变化之后的路径 参数2:变化之前的路径

console.log(val);

},

//深度观察监听

deep: true

}

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NgM6p3V9-1613820169009)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220120634733.png)]

  • 在监听器里面调用findAll()函数,之前是没这个函数的,将User.vue的created()生命周期函数里面的方法封装成findAll()放入User.vue的methods中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENkMQtIQ-1613820169011)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220125338010.png)]

  • 输完数据后点添加会路由切换成/user,并再发送一个findAll查询所有数据

因为接口的是模拟的,所以数据不可能更新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P44aZqfL-1613820169013)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220125530897.png)]


三、用户删除


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bigZQIYl-1613820169015)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220131624674.png)]

  • 创建虚拟删除接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MxZeP9Yq-1613820169017)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220130607827.png)]

访问:http://rap2api.taobao.org/app/mock/277648/user/delete?id=1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eq1GbBzg-1613820169018)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220131731873.png)]

delRow(id){

console.log(id);

let _this = this;

this.$http.get(“http://rap2api.taobao.org/app/mock/277648/user/delete?id=”+id).then(function(resp){

console.log(resp);

if(resp.data.success){ //判断数据是否已经删除

_this.findAll() //刷新页面,查询所有

}

});

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xYJhlbcy-1613820169020)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220131815174.png)]


四、用户修改


  • 创建组件 UserEdit.vue

.

修改用户信息

用户名:

年龄:

生日:

<input type=“button” value=“添加” @click=“UserEdit”/>

  • 注册组件router/index.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6BkTJ9fj-1613820169022)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220132431677.png)]

  • User.vue

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-86UxnXDs-1613820169024)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220133834220.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l0nb3PMC-1613820169025)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220133905184.png)]

  • 效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fnznbQue-1613820169027)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220133232778.png)]

  • 获取另一个组件中的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CCjLrLo5-1613820169028)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220134408503.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-muFyzaNo-1613820169029)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220134212567.png)]

获取到id后, 就可以根据id查询用户了,

  • 创建虚拟findOne接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cI26Z8m9-1613820169030)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220140458083.png)]

访问:http://rap2api.taobao.org/app/mock/277648/user/findOne

  • findOne()

findOne(){

let _this = this;

this.$http.get(“http://rap2api.taobao.org/app/mock/277648/user/findOne?id=”+this.user.id).then(function(resp){

console.log(resp.data);

_this.user=resp.data;

});

}

  • 创建虚拟用户更新接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E6rAVoE8-1613820169031)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220140901652.png)]

地址:http://rap2api.taobao.org/app/mock/277648/user/edit

  • UserEdit()

UserEdit(){

console.log(this);

//发送一个更新的请求

let _this = this;

this.$http.post(“http://rap2api.taobao.org/app/mock/277648/user/edit”,this.user).then(function(resp){

console.log(resp);

if(resp.data.success){

_this.$router.push(“/user”); //切换路由

}

});

}

user组件他有watch来监听路由的切换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5B9BP6P-1613820169033)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220141139472.png)]

  • UserEdit.vue组件

.

修改用户信息

用户名:

年龄:

生日:

<input type=“button” value=“添加” @click=“UserEdit”/>

以上使用的模拟接口来实现的,

下面在将模拟的接口转换后端的接口


五、后台开发


  • 新建数据库

使用之前的bootvue数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TcADq20N-1613820169034)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220142619241.png)]

CREATE TABLE vue_user(

id INT(6) PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(40),

age INT(3),

bir datetime

)

  • 引入依赖

org.springframework.boot

spring-boot-starter-web

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.4

com.alibaba

druid-spring-boot-starter

1.1.17

mysql

mysql-connector-java

5.1.49

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

  • application.yaml配置文件

spring:

application:

name: vue #项目名

datasource:

password: ‘00000’

username: ‘root’

type: com.alibaba.druid.pool.DruidDataSource #使用Druid数据连接池

driver-class-name: com.mysql.jdbc.Driver #数据库驱动

url: jdbc:mysql://localhost:3306/bootvue?characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false

server:

port: 6161

servlet:

context-path: /vue #项目路径

mybatis:

mapper-locations: classpath:com.achang.mapper/*.xml #指定sql映射文件位置

type-aliases-package: com.achang.entity #指定bean对象位置

  • 项目整体布局

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdycAuVS-1613820169035)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210220152955893.png)]

  • 根据数据库新建entity实例

@Data

@AllArgsConstructor

@NoArgsConstructor

@ToString

@Accessors(chain = true) //链式调用

public class User {

private Integer id;

private String name;

private Integer age;

@JsonFormat(pattern = “yyyy-MM-dd”,timezone = “GTM+8”)

//设置日期格式,pattern格式化格式,timezone时区:我们在东八区

private Date bir;

}

  • dao/UserDao

@Mapper

public interface UserDao {

//保存

void save(User user);

//更新

void update(User user);

//删除

void delete(Integer id);

//查询所有

List findAll();

//根据id,查询一个用户

User findById(Integer id);

}

  • mapper/UserDaoMapper.xml

insert into vue_user

values(#{id},#{name},#{age},#{bir})

update vue_user

set name=#{name},age=#{age},bir=#{bir}

where id = #{id}

select id,name,age,bir from vue_user

delete from vue_user

where id = #{id}

select id,name,age,bir from vue_user

where id = #{id}

  • service/UserService接口

public interface UserService {

//保存

void save(User user);

//更新

void update(User user);

//删除

void delete(Integer id);

//查询所有

List findAll();

//根据id,查询一个用户

User findById(Integer id)

}

  • impl/UserServiceImpl

@Service

@Transactional

public class UserServiceImpl implements UserService{

@Autowired

private UserDao userDao;

@Override

public void save(User user) {

userDao.save(user);

}

@Override

public void update(User user) {

userDao.update(user);

}

@Override

public void delete(Integer id) {

userDao.delete(id);

}

@Override

public List findAll() {

return userDao.findAll();

}

@Override

public User findById(Integer id) {

return userDao.findById(id);

}

}

  • controller/UserController/findAll()查询所有方法

@RestController

@CrossOrigin //解决跨域问题

@RequestMapping(“/user”)

public class UserController {

@Autowired

private UserService userService;

//查询所有

@GetMapping(“/findAll”)

public Map<String,Object> findAll(Integer page, Integer rows){

List result = userService.findAll();

HashMap<String, Object> map = new HashMap<>();

map.put(“total”,1);

map.put(“totalPage”,1);

map.put(“page”,1);

map.put(“result”,result);

return map;

}

}

  • 前端components/User.vue,findAll()查询所有用户

将之前的模拟接口修改为后端接口

findAll(){ //查询所有

let _this = this;

// 使用axios,发起异步请求,下面url地址通过RAP2来模拟后端接口

this.$http.get(“http://localhost:6161/vue/user/findAll”).then(function(resp){

_this.users=resp.data.result

})

}

  • controller/UserController/add() 添加用户

//添加用户

@PostMapping(“/add”)

public Map<String,Object> add(@RequestBody User user){

HashMap<String, Object> map = new HashMap<>();

try {

userService.save(user);

map.put(“success”,true);

map.put(“msg”,“添加成功”);

} catch (Exception e) {

e.printStackTrace();

map.put(“success”,false);

map.put(“msg”,"添加失败: "+e.getMessage());

}

return map;

}

  • 前端components/UserAdd.vue,saveUserInfo()添加用户

saveUserInfo(){

最后

中年危机是真实存在的,即便有技术傍身,还是难免对自己的生存能力产生质疑和焦虑,这些年职业发展,一直在寻求消除焦虑的依靠。

  • 技术要深入到什么程度?

  • 做久了技术总要转型管理?

  • 我能做什么,我想做什么?

  • 一技之长,就是深耕你的专业技能,你的专业技术。(重点)

  • 独立做事,当你的一技之长达到一定深度的时候,需要开始思考如何独立做事。(创业)

  • 拥有事业,选择一份使命,带领团队实现它。(创业)

一技之长分五个层次

  • 栈内技术 - 是指你的前端专业领域技术

  • 栈外技术 - 是指栈内技术的上下游,领域外的相关专业知识

  • 工程经验 - 是建设专业技术体系的“解决方案”

  • 带人做事 - 是对团队协作能力的要求

  • 业界发声 - 工作经验总结对外分享,与他人交流

永远不要放弃一技之长,它值得你长期信仰持有

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue 等等。

d() 添加用户

//添加用户

@PostMapping(“/add”)

public Map<String,Object> add(@RequestBody User user){

HashMap<String, Object> map = new HashMap<>();

try {

userService.save(user);

map.put(“success”,true);

map.put(“msg”,“添加成功”);

} catch (Exception e) {

e.printStackTrace();

map.put(“success”,false);

map.put(“msg”,"添加失败: "+e.getMessage());

}

return map;

}

  • 前端components/UserAdd.vue,saveUserInfo()添加用户

saveUserInfo(){

最后

中年危机是真实存在的,即便有技术傍身,还是难免对自己的生存能力产生质疑和焦虑,这些年职业发展,一直在寻求消除焦虑的依靠。

  • 技术要深入到什么程度?

  • 做久了技术总要转型管理?

  • 我能做什么,我想做什么?

  • 一技之长,就是深耕你的专业技能,你的专业技术。(重点)

  • 独立做事,当你的一技之长达到一定深度的时候,需要开始思考如何独立做事。(创业)

  • 拥有事业,选择一份使命,带领团队实现它。(创业)

一技之长分五个层次

  • 栈内技术 - 是指你的前端专业领域技术

  • 栈外技术 - 是指栈内技术的上下游,领域外的相关专业知识

  • 工程经验 - 是建设专业技术体系的“解决方案”

  • 带人做事 - 是对团队协作能力的要求

  • 业界发声 - 工作经验总结对外分享,与他人交流

永远不要放弃一技之长,它值得你长期信仰持有

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue 等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值