2024年Web前端最新Day198(1),程序员技术面试题

最后

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

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

  • 输完数据后点添加会路由切换成/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(){

console.log(this);

//发送aixos请求

let _this= this;

this.$http.post(“http://localhost:6161/vue/user/add”,_this.user).then(function(resp){

console.log(resp);

if(resp.data.success){

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

}

})

}

  • controller/UserController /delete(),删除用户

//用户删除

@GetMapping(“/delete”)

public Map<String,Object> delete(Integer id){

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

try {

userService.delete(id);

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,delRow()删除用户

delRow(id){

console.log(id);

let _this = this;

this.$http.get(“http://localhost:6161/vue/user/delete?id=”+id).then(function(resp){

console.log(resp);

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

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

}

});

}

  • controller/UserController/findOne(),根据id获取用户

//根据id查询用户

@GetMapping(“findOne”)

public User finOne(Integer id){

return userService.findById(id);

}

  • 前端components/UserEdit.vue,findOne()

findOne(){

let _this = this;

this.$http.get(“http://localhost:6161/vue/user/findOne?id=”+this.user.id).then(function(resp){

console.log(resp.data);

_this.user=resp.data;

});

}

  • controller/UserController/edit(),修改用户

//修改用户

@PostMapping(“/edit”)

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

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

try {

userService.update(user);

map.put(“success”,true);

map.put(“msg”,“更新成功”);

} catch (Exception e) {

e.printStackTrace();

map.put(“success”,true);

map.put(“msg”,“感谢成功”);

}

return map;

}

最后

整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。

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

《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》

前端面试题宝典

前端校招面试题详解

d查询用户

@GetMapping(“findOne”)

public User finOne(Integer id){

return userService.findById(id);

}

  • 前端components/UserEdit.vue,findOne()

findOne(){

let _this = this;

this.$http.get(“http://localhost:6161/vue/user/findOne?id=”+this.user.id).then(function(resp){

console.log(resp.data);

_this.user=resp.data;

});

}

  • controller/UserController/edit(),修改用户

//修改用户

@PostMapping(“/edit”)

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

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

try {

userService.update(user);

map.put(“success”,true);

map.put(“msg”,“更新成功”);

} catch (Exception e) {

e.printStackTrace();

map.put(“success”,true);

map.put(“msg”,“感谢成功”);

}

return map;

}

最后

整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。

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

《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》

[外链图片转存中…(img-ehWQ64eh-1715420218489)]

[外链图片转存中…(img-6SwDhvKA-1715420218490)]

[外链图片转存中…(img-Iubxv9Xa-1715420218490)]

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值