Java最全基于Java+SpringBoot+vue+node,快点来白嫖

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

image

image

image

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

前言介绍:

随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。自行车在线租赁管理系统,主要的模块包括首页、个人中心、用户管理、会员管理、自行车租赁管理、租赁管理、会员租赁管理、还车管理、会员还车管理、分类栏管理、留言板管理、系统管理等功能。系统中管理员主要是为了安全有效地存储和管理各类信息,还可以对系统进行管理与更新维护等操作,并且对后台有相应的操作权限。要想实现自行车在线租赁管理系统的各项功能,需要后台数据库的大力支持。管理员验证注册信息,收集的信息,并由此分析得出的关联信息等大量的数据都由数据库管理。本文中数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。本系统的开发使获取自行车在线租赁管理系统信息能够更加方便快捷,同时也使自行车在线租赁管理系统管理信息变的更加系统化、有序化。系统界面较友好,易于操作。

功能设计:

自行车在线租赁管理系统基于Web服务模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在不受时间、地点的限制来使用这个系统。自行车在线租赁管理系统工作原理图,如图所示:

系统架构图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。自行车在线租赁管理系统的整体结构设计如图所示。

功能截图:

首页登录注册:

用户端:自行车在线租赁管理系统,在系统的首页可以查看首页、自行车租赁、活动、留言反馈、个人中心、后台管理、在线客服等信息进行详细操作

自行车租赁,在自行车租赁页面中可以查看自行车编号、品牌、分类、规格、简介、时价、会员时价、点击次数、图片等信息,并进行租赁、会员租赁操作。

自行车活动

留言反馈:

个人中心:

管理员端: 管理员登录进入系统之后,就可以对所有的信息进行查看,可以查看到首页、个人中心、用户管理、会员管理、自行车租赁管理、租赁管理、会员租赁管理、还车管理、会员还车管理、分类栏管理、留言板管理、系统管理等,并且还可以对其进行相应的操作管理

用户信息:

自行车租赁管理:

还车管理:

分类专栏:

留言板和回复:

首页轮播图:

活动管理:

关键代码:

后端登录controller:


/\*\*
 \* 登录相关
 \*/
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/\*\*
 \* 登录
 \*/
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/\*\*
 \* 注册
 \*/
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/\*\*
 \* 退出
 \*/
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/\*\*
 \* 密码重置
 \*/
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/\*\*
 \* 列表
 \*/
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/\*\*
 \* 列表
 \*/
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /\*\*
 \* 信息
 \*/
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /\*\*
 \* 获取用户的session用户信息
 \*/
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /\*\*
 \* 保存
 \*/
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /\*\*
 \* 修改
 \*/
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
    	UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
    	if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
    		return R.error("用户名已存在。");
    	}
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /\*\*
 \* 删除
 \*/
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

前端登录vue代码:

<template>
  <div>
    <div class="container loginIn" style="backgroundImage: url(http://localhost:8080/springbootl5za3/upload/login\_bg.png)">

      <div :class="2 == 1 ? 'left' : 2 == 2 ? 'left center' : 'left right'" style="backgroundColor: rgba(221, 239, 223, 0.3)">
        <el-form class="login-form" label-position="left" :label-width="1 == 3 ? '56px' : '0px'">
          <div class="title-container"><h3 class="title" style="color: rgba(86, 188, 225, 0.89)">自行车在线租赁管理系统登录</h3></div>
          <el-form-item :label="1 == 3 ? '用户名' : ''" :class="'style'+1">
            <span v-if="1 != 3" class="svg-container" style="color:rgba(16, 15, 15, 0.97);line-height:44px"><svg-icon icon-class="user" /></span>
            <el-input placeholder="请输入用户名" name="username" type="text" v-model="rulesForm.username" />
          </el-form-item>
          <el-form-item :label="1 == 3 ? '密码' : ''" :class="'style'+1">
            <span v-if="1 != 3" class="svg-container" style="color:rgba(16, 15, 15, 0.97);line-height:44px"><svg-icon icon-class="password" /></span>
            <el-input placeholder="请输入密码" name="password" type="password" v-model="rulesForm.password" />
          </el-form-item>
          <el-form-item v-if="0 == '1'" class="code" :label="1 == 3 ? '验证码' : ''" :class="'style'+1">
            <span v-if="1 != 3" class="svg-container" style="color:rgba(16, 15, 15, 0.97);line-height:44px"><svg-icon icon-class="code" /></span>
            <el-input placeholder="请输入验证码" name="code" type="text" v-model="rulesForm.code" />
            <div class="getCodeBt" @click="getRandCode(4)" style="height:44px;line-height:44px">
              <span v-for="(item, index) in codes" :key="index" :style="{color:item.color,transform:item.rotate,fontSize:item.size}">{{ item.num }}</span>
            </div>
          </el-form-item>
          <el-form-item label="角色" prop="loginInRole" class="role">
            <el-radio
 v-for="item in menus"
 v-if="item.hasBackLogin=='是'"
 v-bind:key="item.roleName"
 v-model="rulesForm.role"
 :label="item.roleName"
 >{{item.roleName}}</el-radio>
          </el-form-item>
          <el-button type="primary" @click="login()" class="loginInBt" style="padding:0;font-size:16px;border-radius:20px;height:44px;line-height:44px;width:100%;backgroundColor:rgba(64, 158, 255, 1); borderColor:rgba(64, 158, 255, 1); color:rgba(17, 17, 17, 1)">{{'1' == '1' ? '登录' : 'login'}}</el-button>
          <el-form-item class="setting">
            <!-- <div style="color:rgba(10, 10, 10, 1)" class="reset">修改密码</div> -->
          </el-form-item>
        </el-form>
      </div>

    </div>
  </div>
</template>
<script>
import menu from "@/utils/menu";
export default {
 data() {
 return {
 rulesForm: {
 username: "",
 password: "",
 role: "",
 code: '',
 },
 
 methods: {
 setInputColor(){
 this.$nextTick(()=>{
 document.querySelectorAll('.loginIn .el-input\_\_inner').forEach(el=>{
 el.style.backgroundColor = "rgba(255, 255, 255, 1)"
 el.style.color = "rgba(51, 51, 51, 1)"
 el.style.height = "44px"
 el.style.lineHeight = "44px"
 el.style.borderRadius = "20px"
 })
 document.querySelectorAll('.loginIn .style3 .el-form-item\_\_label').forEach(el=>{
 el.style.height = "44px"
 el.style.lineHeight = "44px"
 })
 document.querySelectorAll('.loginIn .el-form-item\_\_label').forEach(el=>{
 el.style.color = "rgba(16, 15, 15, 0.97)"
 })
 setTimeout(()=>{
 document.querySelectorAll('.loginIn .role .el-radio\_\_label').forEach(el=>{
 el.style.color = "rgba(6, 5, 5, 0.97)"
 })
 },350)
 })

 },
 register(tableName){
 this.$storage.set("loginTable", tableName);
 this.$router.push({path:'/register'})
 },
 // 登陆
 login() {
 let code = ''
 for(let i in this.codes) {
 code += this.codes[i].num
 }
 if ('0' == '1' && !this.rulesForm.code) {
 this.$message.error("请输入验证码");
 return;
 }
 if ('0' == '1' && this.rulesForm.code.toLowerCase() != code.toLowerCase()) {
 this.$message.error("验证码输入有误");
 this.getRandCode()
 return;
 }
 if (!this.rulesForm.username) {
 this.$message.error("请输入用户名");
 return;
 }
 if (!this.rulesForm.password) {
 this.$message.error("请输入密码");
 return;
 }
 if (!this.rulesForm.role) {
 this.$message.error("请选择角色");
 return;
 }
 let menus = this.menus;
 for (let i = 0; i < menus.length; i++) {
 if (menus[i].roleName == this.rulesForm.role) {
 this.tableName = menus[i].tableName;
 }
 }
 this.$http({
 url: `${this.tableName}/login?username=${this.rulesForm.username}&password=${this.rulesForm.password}`,
 method: "post"
 }).then(({ data }) => {
 if (data && data.code === 0) {
 this.$storage.set("Token", data.token);
 this.$storage.set("role", this.rulesForm.role);
 this.$storage.set("sessionTable", this.tableName);
 this.$storage.set("adminName", this.rulesForm.username);
 this.$router.replace({ path: "/index/" });
 } else {
 this.$message.error(data.msg);
 }
 });
 },
 getRandCode(len = 4){
 this.randomString(len)
 },
 

 .center {
 position: absolute;
 left: 50%;
 top: 50%;
 width: 360px;
 transform: translate3d(-50%,-50%,0);
 height: 446px;
 border-radius: 8px;
 }


 .code {
 .el-form-item\_\_content {
 position: relative;

 .getCodeBt {
 position: absolute;
 right: 0;
 top: 0;
 line-height: 40px;
 width: 100px;
 background-color: rgba(51,51,51,0.4);
 color: #fff;
 text-align: center;
 border-radius: 0 4px 4px 0;
 height: 40px;
 overflow: hidden;

 span {
 padding: 0 5px;
 display: inline-block;
 font-size: 16px;
 font-weight: 600;
 }
 }

 .el-input {
 & /deep/ input {
 padding: 0 130px 0 30px;
 }
 }
 }
 }

 .setting {
 & /deep/ .el-form-item\_\_content {
 padding: 0 15px;
 box-sizing: border-box;
 line-height: 32px;
 height: 32px;
 font-size: 14px;
 color: #999;
 margin: 0 !important;

 .register {
 float: left;
 width: 50%;
 }

 .reset {
 float: right;
 width: 50%;
 text-align: right;
 }
 }
 }

 .style2 {
 padding-left: 30px;

 .svg-container {
 left: -30px !important;
 }

 .el-input {
 & /deep/ input {
 padding: 0 15px !important;
 }


## 最后

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/a14ea4d98e4b5f0c069a4acae9aa05c2.webp?x-oss-process=image/format,png)

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

tyle2 {
 padding-left: 30px;

 .svg-container {
 left: -30px !important;
 }

 .el-input {
 & /deep/ input {
 padding: 0 15px !important;
 }


## 最后

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中...(img-NUE5EZMg-1715342317835)]

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值