基础vue3前端登陆注册界面以及主页面设计

news2025/1/21 0:53:56

1.下载依赖

"@element-plus/icons": "^0.0.11",
"@element-plus/icons-vue": "^2.3.1",
"@fortawesome/fontawesome-svg-core": "^6.7.2",
"@fortawesome/free-solid-svg-icons": "^6.7.2",
"@fortawesome/vue-fontawesome": "^3.0.8",
"axios": "^1.7.9",
"element-plus": "^2.9.3",
"vue": "^3.5.13",
"vue-router": "^4.5.0"

2.注册组件

import { createApp } from 'vue';
import App from './App.vue';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import './assets/css/global.css';
import zhCn from 'element-plus/es/locale/lang/zh-cn';
// 导入所有需要的图标组件
import * as Icons from '@element-plus/icons-vue';
import {router} from "./router/router.js";
// 创建 Vue 应用实例
const app = createApp(App);
// 使用路由
app.use(router);
// 使用 Element Plus,并设置语言为中文
app.use(ElementPlus, {
    locale: zhCn,
});
// 动态注册所有图标组件
Object.keys(Icons).forEach(key => {
    app.component(key, Icons[key]);
});
// 挂载应用到 #app 元素上
app.mount('#app');
​

3.编写登陆界面

<template>
  <div class="login-container">
    <!-- 背景轮播图 -->
    <el-carousel :interval="5000" indicator-position="none" class="background-carousel" height="100vh">
      <el-carousel-item v-for="(image, index) in backgroundImages" :key="index">
        <div class="carousel-image" :style="{ backgroundImage: `url(${image})` }"></div>
      </el-carousel-item>
    </el-carousel>
​
    <!-- 登录框 -->
    <div class="login-box">
      <div class="title-container">
        <h3 class="title">实验室信息管理系统</h3>
      </div>
      <el-form ref="formRef" :model="form" :rules="rules" class="login-form">
        <el-form-item prop="number">
          <el-input v-model="form.number" placeholder="请输入学工号" prefix-icon="User"></el-input>
        </el-form-item>
        <el-form-item prop="password">
          <el-input v-model="form.password" placeholder="请输入密码" show-password prefix-icon="Lock"></el-input>
        </el-form-item>
        <div class="button-group">
          <el-button type="primary" @click="handleLogin" class="login-btn">登 录</el-button>
          <el-button type="success" @click="goRegister" class="register-btn">注 册</el-button>
        </div>
      </el-form>
    </div>
  </div>
</template>
​
​
<script setup>
import { ref, reactive } from 'vue';
import { ElMessage } from 'element-plus';
import { useRouter } from 'vue-router';
​
// 创建路由实例
const router = useRouter();
​
// 表单引用
const formRef = ref(null);
​
// 表单数据
const form = reactive({
  number: '',
  password: ''
});
​
// 表单规则
const rules = reactive({
  number: [
    { required: true, message: '请输入学号/学工号', trigger: 'blur' }
  ],
  password: [
    { required: true, message: '请输入密码', trigger: 'blur' }
  ]
});
​
// 背景图片数组
const backgroundImages = [
  new URL('https://pic.meitukk.com/uploads/meitukk/dm/20230621/230621120150827.jpg').href,
  new URL('https://pic.meitukk.com/uploads/meitukk/dm/20230622/230622045223599.jpg').href,
  new URL('https://img.shetu66.com/2022/10/28/1666928035720956.jpg').href,
  new URL('https://n.sinaimg.cn/sinacn10116/600/w1920h1080/20190326/2c30-hutwezf6832339.jpg').href,
  new URL('https://c-ssl.duitang.com/uploads/blog/202303/15/20230315122347_db706.jpg').href
];
​
// 登录方法
const handleLogin = () => {
  formRef.value.validate((valid) => {
    if (valid) {
      // 这里添加登录逻辑,例如调用API进行验证
      console.log('submit!');
      ElMessage.success('登录成功');
      // 假设登录成功后跳转到主页
      router.push('/');
    } else {
      console.log('error submit!!');
      return false;
    }
  });
};
​
// 注册方法
const goRegister = () => {
  // 这里添加注册逻辑,例如跳转到注册页面
  router.push('/register');
};
</script>
</script>
<style scoped>
.login-container {
  width: 100vw; /* 使用视口宽度 */
  height: 100vh; /* 使用视口高度 */
  overflow: hidden;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}
​
.background-carousel {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%; /* 修改为全屏高度 */
  z-index: -1; /* 确保轮播图在最底层 */
  overflow: hidden;
}
​
.carousel-image {
  width: 100%;
  height: 100%;
  background-size: cover;
  background-position: center; /* 确保背景图片居中 */
  background-repeat: no-repeat;
}
​
.login-box {
  width: 400px;
  padding: 40px;
  background-color: rgba(255, 255, 255, 0.8);
  border-radius: 10px;
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  text-align: center;
  position: relative;
  z-index: 1; /* 确保登录框在轮播图之上 */
}
​
.title-container {
  margin-bottom: 30px;
}
​
.title {
  color: #2c3e50;
  font-size: 26px;
  font-weight: bold;
}
​
.login-form {
  padding: 0 30px;
}
​
.button-group {
  display: flex;
  justify-content: space-between;
}
​
.login-btn,
.register-btn {
  width: 48%;
  margin-top: 15px;
}
</style>
  • 实现效果

4.编写注册页面

<template>
  <div class="register-container">
    <!-- 背景轮播图 -->
    <transition name="fade" mode="out-in">
      <el-carousel v-if="carouselLoaded" :interval="5000" indicator-position="none" class="background-carousel" height="100vh">
        <el-carousel-item v-for="(image, index) in backgroundImages" :key="index">
          <div class="carousel-image" :style="{ backgroundImage: `url(${image})` }"></div>
        </el-carousel-item>
      </el-carousel>
    </transition>
​
    <!-- 注册框 -->
    <div class="register-box">
      <div class="title-container">
        <h3 class="title">欢迎注册</h3>
      </div>
      <el-form ref="formRef" :model="form" :rules="rules" class="register-form" @submit.prevent>
        <el-form-item prop="number">
          <el-input v-model="form.number" placeholder="请输入学工号"></el-input>
        </el-form-item>
        <el-form-item prop="nickname">
          <el-input v-model="form.nickname" placeholder="请输入姓名"></el-input>
        </el-form-item>
        <el-form-item prop="password">
          <el-input v-model="form.password" placeholder="请输入密码" show-password></el-input>
        </el-form-item>
        <el-form-item prop="confirm">
          <el-input v-model="form.confirm" placeholder="请再次输入密码" show-password></el-input>
        </el-form-item>
        <div class="button-group">
          <el-button type="primary" @click="handleRegister" class="register-btn">注 册</el-button>
          <el-button type="success" @click="goLogin" class="login-btn">登 录</el-button>
        </div>
      </el-form>
    </div>
  </div>
</template>
<script setup>
import {onMounted, reactive, ref} from 'vue';
import {useRouter} from 'vue-router';
import {ElMessage} from 'element-plus';
import axios from 'axios';
​
// 创建路由实例
const router = useRouter();
​
// 表单引用
const formRef = ref(null);
​
// 表单数据
const form = reactive({
  number: '',
  nickname: '',
  password: '',
  confirm: ''
});
​
// 表单规则
const rules = reactive({
  number: [
    { required: true, message: '请输入学工号', trigger: 'blur' }
  ],
  nickname: [
    { required: true, message: '请输入姓名', trigger: 'blur' }
  ],
  password: [
    { required: true, message: '请输入密码', trigger: 'blur' }
  ],
  confirm: [
    { required: true, message: '请确认密码', trigger: 'blur' }
  ]
});
​
// 背景图片加载状态
const carouselLoaded = ref(false);
const backgroundImages = ref([]);
​
onMounted(async () => {
  try {
    // 使用相对路径引入图片
    // 直接将图片路径赋值给 backgroundImages
    backgroundImages.value = [
      new URL('https://pic.meitukk.com/uploads/meitukk/dm/20230621/230621120150827.jpg').href,
      new URL('https://pic.meitukk.com/uploads/meitukk/dm/20230622/230622045223599.jpg').href,
      new URL('https://img.shetu66.com/2022/10/28/1666928035720956.jpg').href,
      new URL('https://n.sinaimg.cn/sinacn10116/600/w1920h1080/20190326/2c30-hutwezf6832339.jpg').href,
      new URL('https://c-ssl.duitang.com/uploads/blog/202303/15/20230315122347_db706.jpg').href
​
    ];
    carouselLoaded.value = true;
  } catch (error) {
    console.error('Failed to load images:', error);
  }
});
​
// 注册方法
const handleRegister = () => {
  if (form.password !== form.confirm) {
    ElMessage({
      type: 'error',
      message: '密码不一致'
    });
    return;
  }
  formRef.value.validate((valid) => {
    if (valid) {
      axios.post('http://localhost:9090/user/register', form)
          .then(res => {
            if (res.data.code === '0') {
              ElMessage({
                type: 'success',
                message: '注册成功'
              });
              router.push('/login');
            } else {
              ElMessage({
                type: 'error',
                message: res.data.msg
              });
            }
          })
          .catch(error => {
            console.error('There was an error!', error);
            ElMessage({
              type: 'error',
              message: '服务器错误,请稍后再试'
            });
          });
    }
  });
};
​
// 登录方法
const goLogin = () => {
  router.push('/login');
};
</script>
<style scoped>
.register-container {
  width: 100vw; /* 使用视口宽度 */
  height: 100vh; /* 使用视口高度 */
  overflow: hidden;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}
.background-carousel {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%; /* 修改为全屏高度 */
  z-index: -1; /* 确保轮播图在最底层 */
  overflow: hidden;
}
.carousel-image {
  width: 100%;
  height: 100%;
  background-size: cover;
  background-position: center; /* 确保背景图片居中 */
  background-repeat: no-repeat;
  transition: opacity 0.5s ease;
}
.register-box {
  width: 400px;
  padding: 40px;
  background-color: rgba(255, 255, 255, 0.8);
  border-radius: 10px;
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  text-align: center;
  position: relative;
  z-index: 1; /* 确保注册框在轮播图之上 */
}
​
.title-container {
  margin-bottom: 30px;
}
​
.title {
  color: #2c3e50;
  font-size: 30px;
  font-weight: bold;
}
​
.register-form {
  padding: 0 30px;
}
​
.button-group {
  display: flex;
  justify-content: space-between;
  margin-top: 20px;
}
​
.register-btn,
.login-btn {
  width: 48%; 
}
​
/* 隐藏前缀图标 */
.el-input__prefix {
  display: none;
}
</style>
  • 实现效果

5.编写主页面

  • 主界面父组件

<script setup>
import Header from "../components/Header.vue";
import Aside from "../components/Aside.vue";
</script>
​
<template>
  <div>
    <!--  头部  -->
    <Header />
    <!--   主体   -->
    <div style="display: flex">
      <!--      侧边栏  -->
      <Aside />
      <!--     内容区域   -->
      <router-view style="flex: 1"/>
    </div>
  </div>
</template>
<style scoped>
​
</style>
  • 子组件侧边栏

<template>
  <div class="aside-container">
    <el-menu default-active="1-1" class="el-menu-vertical-demo" :collapse="isCollapsed" @open="handleOpen" @close="handleClose">
      <!-- 个人中心 -->
      <el-sub-menu index="1-1">
        <template #title>
          <el-icon><User /></el-icon>
          <span>个人中心</span>
        </template>
        <el-menu-item index="1-1-1">
          <el-icon><HomeFilled /></el-icon>
          <span>信息维护</span>
        </el-menu-item>
      </el-sub-menu>
      <!-- 系统管理 -->
      <el-sub-menu index="1-2">
        <template #title>
          <el-icon><Setting /></el-icon>
          <span>系统管理</span>
        </template>
        <el-menu-item index="1-2-1">
          <el-icon><VideoCamera /></el-icon>
          <span>设备管理</span>
        </el-menu-item>
        <el-menu-item index="1-2-2">
          <el-icon><Mic /></el-icon>
          <span>学生管理</span>
        </el-menu-item>
        <el-menu-item index="1-2-3">
          <el-icon><IceTea /></el-icon>
          <span>实验室管理</span>
        </el-menu-item>
      </el-sub-menu>
      <!-- 记录查询 -->
      <el-sub-menu index="1-3">
        <template #title>
          <el-icon><MessageBox /></el-icon>
          <span>记录查询</span>
        </template>
​
          <el-menu-item index="1-3-1">
            <el-icon><Document /></el-icon>
            <span>设备申请记录</span>
          </el-menu-item>
          <el-menu-item index="1-3-2">
            <el-icon><DeleteFilled /></el-icon>
            <span>设备报废记录</span>
          </el-menu-item>
          <el-menu-item index="1-3-3">
            <el-icon><TrendCharts /></el-icon>
            <span>设备借出记录</span>
          </el-menu-item>
          <el-menu-item index="1-3-4">
            <el-icon><Calendar /></el-icon>
            <span>实验室预约记录</span>
          </el-menu-item>
​
      </el-sub-menu>
      <!-- 设备相关申请 -->
      <el-sub-menu index="1-4">
        <template #title>
          <el-icon><SetUp /></el-icon>
          <span>设备相关申请</span>
        </template>
          <el-menu-item index="1-4-1">
            <el-icon><Delete /></el-icon>
            <span>设备报废申请</span>
          </el-menu-item>
          <el-menu-item index="1-4-2">
            <el-icon><Tickets /></el-icon>
            <span>设备使用申请</span>
          </el-menu-item>
          <el-menu-item index="1-4-3">
            <el-icon><CircleCheckFilled /></el-icon>
            <span>设备归还申请</span>
          </el-menu-item>
      </el-sub-menu>
      <!-- 实验室相关申请 -->
      <el-sub-menu index="1-5">
        <template #title>
          <el-icon><Plus /></el-icon>
          <span>实验室相关申请</span>
        </template>
          <el-menu-item index="1-5-1" >
            <el-icon><Ticket /></el-icon>
            <span>预约实验室</span>
          </el-menu-item>
          <el-menu-item index="1-5-2">
            <el-icon><CircleCloseFilled /></el-icon>
            <span>归还实验室</span>
          </el-menu-item>
      </el-sub-menu>
​
      <!-- 审批进度 -->
      <el-sub-menu index="1-6">
        <template #title>
          <el-icon><Check /></el-icon>
          <span>审批进度</span>
        </template>
          <el-menu-item index="1-6-1">
            <el-icon><InfoFilled /></el-icon>
            <span>设备申请审批</span>
          </el-menu-item>
          <el-menu-item index="1-6-2">
            <el-icon><DeleteFilled /></el-icon>
            <span>设备报废审批</span>
          </el-menu-item>
          <el-menu-item index="1-6-3">
            <el-icon><Ticket /></el-icon>
            <span>实验室预约审批</span>
          </el-menu-item>
      </el-sub-menu>
      <!-- 数据可视化 -->
      <el-sub-menu index="1-8">
        <template #title>
          <el-icon><PieChart /></el-icon> 设备数据可视化
        </template>
          <el-menu-item index="1-8-1">
            <el-icon><DataAnalysis /></el-icon> 设备数据可视化
          </el-menu-item>
      </el-sub-menu>
    </el-menu>
  </div>
</template>
<script setup>
import { ref } from 'vue';
import {
  Setting,
  User,
  HomeFilled,
  VideoCamera,
  Mic,
  IceTea,
  MessageBox,
  Document,
  DeleteFilled,
  TrendCharts,
  Calendar,
  SetUp,
  Delete,
  Tickets,
  CircleCheckFilled,
  Plus,
  Ticket,
  CircleCloseFilled,
  Check,
  InfoFilled
} from '@element-plus/icons-vue';
​
// 控制菜单折叠状态
const isCollapsed = ref(false);
​
// 处理子菜单打开事件
const handleOpen = (key, keyPath) => {
  console.log('opened sub menu:', key, keyPath);
};
​
// 处理子菜单关闭事件
const handleClose = (key, keyPath) => {
  console.log('closed sub menu:', key, keyPath);
};
</script>
<style scoped>
.aside-container {
  width: 200px;
  transition: width 0.3s ease;
}
​
.el-menu-vertical-demo:not(.el-menu--collapse) {
  width: 200px;
  min-height: 400px;
}
​
.el-menu {
  border-right: none;
}
​
.el-menu-item [class^=el-icon-]+span {
  margin-left: 8px;
}
​
.menu-item-group-title {
  padding: 8px 20px;
  color: #a8abb2;
  font-size: 12px;
  line-height: 24px;
  background-color: #f5f7fa;
}
​
.el-menu-item.is-active {
  background-color: #ecf5ff;
  color: #409eff;
}
​
.el-sub-menu__title:hover,
.el-menu-item:hover {
  background-color: #eef1f6 !important;
}
​
@media (max-width: 768px) {
  .aside-container {
    width: 64px;
  }
​
  .el-menu-vertical-demo:not(.el-menu--collapse) {
    width: 64px;
  }
​
  .el-sub-menu__title span,
  .el-menu-item span {
    display: none;
  }
​
  .el-sub-menu__icon-arrow {
    display: none;
  }
}
</style>
  • 子组件头部导航栏

<template>
  <header class="app-header">
    <div class="header-content">
      <div class="logo">实验室信息管理系统</div>
      <div class="user-action">
        <el-dropdown trigger="click" @command="handleCommand">
          <span class="el-dropdown-link user-profile" @click.stop>
            <el-avatar :size="30" :src="defaultAvatar" style="vertical-align: middle;"></el-avatar>
            <span class="username">{{ username }}</span>
            <el-icon class="el-icon--right"><arrow-down /></el-icon>
          </span>
          <template #dropdown>
            <el-dropdown-menu>
              <el-dropdown-item command="changePassword">修改密码</el-dropdown-item>
              <el-dropdown-item command="logout">退出系统</el-dropdown-item>
            </el-dropdown-menu>
          </template>
        </el-dropdown>
        <!-- 修改密码对话框 -->
        <el-dialog
            title="修改密码"
            v-model="dialogVisible"
            width="400px"
            center
            @close="resetForm"
        >
          <el-form ref="passwordForm" :model="form" :rules="rules" label-width="100px">
            <el-form-item label="旧密码" prop="oldPassword">
              <el-input v-model="form.oldPassword" type="password"></el-input>
            </el-form-item>
            <el-form-item label="新密码" prop="newPassword">
              <el-input v-model="form.newPassword" type="password"></el-input>
            </el-form-item>
            <el-form-item label="确认密码" prop="confirmPassword">
              <el-input v-model="form.confirmPassword" type="password"></el-input>
            </el-form-item>
          </el-form>
          <template #footer>
            <span class="dialog-footer">
              <el-button @click="dialogVisible = false">取消</el-button>
              <el-button type="primary" @click="submitForm('passwordForm')">确定</el-button>
            </span>
          </template>
        </el-dialog>
      </div>
    </div>
  </header>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { ArrowDown } from '@element-plus/icons-vue';
// 假定用户名称和默认头像链接
const username = ref('张三');
const defaultAvatar = ref('https://pic.meitukk.com/uploads/meitukk/dm/20230621/230621120150827.jpg');
​
// 对话框可见性控制
const dialogVisible = ref(false);
​
// 表单数据和验证规则
const form = reactive({
  oldPassword: '',
  newPassword: '',
  confirmPassword: ''
});
​
const rules = {
  oldPassword: [{ required: true, message: '请输入旧密码', trigger: 'blur' }],
  newPassword: [{ required: true, message: '请输入新密码', trigger: 'blur' }],
  confirmPassword: [
    { required: true, message: '请再次输入新密码', trigger: 'blur' },
    ({ value }, callback) => {
      if (value !== form.newPassword) {
        callback(new Error('两次输入的密码不一致'));
      } else {
        callback();
      }
    }
  ]
};
​
// 提交表单的方法
const submitForm = (formName) => {
  // 这里可以添加提交逻辑,例如发送请求到服务器等
  console.log('Submit:', form);
  dialogVisible.value = false;
};
​
// 重置表单的方法
const resetForm = () => {
  form.oldPassword = '';
  form.newPassword = '';
  form.confirmPassword = '';
};
​
// 下拉菜单命令处理
const handleCommand = (command) => {
  if (command === 'changePassword') {
    dialogVisible.value = true;
  } else if (command === 'logout') {
    // 处理登出逻辑
    console.log('Logout');
  }
};
</script>
<style scoped>
.app-header {
  height: 60px;
  line-height: 60px;
  background-color: #304156;
  color: #F8F8FF;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 20px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
​
.header-content {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
​
.logo {
  font-weight: bold;
  font-size: 18px;
}
​
.user-action {
  display: flex;
  align-items: center;
}
​
.user-profile {
  cursor: pointer;
  display: flex;
  align-items: center;
  color: #F8F8FF;
}
​
.username {
  margin-left: 8px;
}
​
.el-dropdown-link {
  display: flex;
  align-items: center;
}
​
@media (max-width: 768px) {
  .logo {
    font-size: 16px;
  }
​
  .user-action {
    flex-direction: column;
    align-items: flex-end;
  }
​
  .user-profile {
    flex-direction: column;
    align-items: flex-start;
  }
​
  .el-avatar {
    margin-bottom: 5px;
  }
}
​
/* 新增样式 */
.el-dropdown-menu__item {
  text-align: left;
}
​
.dialog-footer {
  text-align: right;
}
​
.el-dialog__header {
  background-color: #f5f7fa;
  padding: 16px 20px;
  border-bottom: 1px solid #ebeef5;
}
​
.el-dialog__body {
  padding: 20px;
}
​
.el-form-item {
  margin-bottom: 18px;
}
​
.el-input__inner {
  border-radius: 4px;
}
</style>
  • 实现效果

6.编写路由

import { createRouter, createWebHistory } from 'vue-router'
import LayOut from "../layout/LayOut.vue";
import Login from "../views/Login.vue";
import Register from "../views/Register.vue";
export const router = createRouter({
    history: createWebHistory(),
    routes:[
        {
            path: '/',
            name: 'Layout',
            component: LayOut,
        },
        {
            path:'/login',
            name:'Login',
            component:Login
        },
        {
            path:'/register',
            name:'Register',
            component:Register
        }
    ]
})

7.全局样式

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2279581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国数字安全产业年度报告(2024)

数字安全是指&#xff0c;在全球数字化背景下&#xff0c;合理控制个人、组织、国家在各种活动中面临的数字风险&#xff0c;保障数字社会可持续发展的政策法规、管理措施、技术方法等安全手段的总和。 数字安全领域可从三个方面对应新质生产力的三大内涵:一是基于大型语言模型…

从CRUD到高级功能:EF Core在.NET Core中全面应用(三)

目录 IQueryable使用 原生SQL使用 实体状态跟踪 全局查询筛选器 并发控制使用 IQueryable使用 在EFCore中IQueryable是一个接口用于表示可查询的集合&#xff0c;它继承自IEnumerable但具有一些关键的区别&#xff0c;使得它在处理数据库查询时非常有用&#xff0c;普通集…

【VRChat · 改模】Unity2019、2022的版本选择哪个如何决策,功能有何区别;

总览 1.Unity2019、2022的版本的选择 2.Unity添加着色器教程 一、Unity2019、2022的版本的选择 1.Unity2019 和 Unity2022 的区别&#xff0c;VRChat SDK 为何要区分两个版本 我是外行&#xff0c;最开始以为的是&#xff0c;2019 和 2022 的变化是基于这个模型本身的。 也…

人工智能之深度学习-[1]-了解深度学习

文章目录 深度学习1. 神经网络的基础2. 深度学习中的重要概念3. 深度学习的工作流程4. 深度学习的应用5. 深度学习的挑战6. 深度学习与传统机器学习的比较7.深度学习的特点 8. 常见的深度学习模型9.深度学习发展史[了解] 深度学习 深度学习&#xff08;Deep Learning&#xff…

彻底理解JVM类加载机制

文章目录 一、类加载器和双亲委派机制1.1、类加载器1.2、双亲委派机制1.3、自定义类加载器1.4、打破双亲委派机制 二、类的加载 图片来源&#xff1a;图灵学院   由上图可知&#xff0c;创建对象&#xff0c;执行其中的方法&#xff0c;在java层面&#xff0c;最重要的有获取…

第148场双周赛:循环数组中相邻元素的最大差值、将数组变相同的最小代价、最长特殊路径、所有安放棋子方案的曼哈顿距离

Q1、循环数组中相邻元素的最大差值 1、题目描述 给你一个 循环 数组 nums &#xff0c;请你找出相邻元素之间的 最大 绝对差值。 **注意&#xff1a;**一个循环数组中&#xff0c;第一个元素和最后一个元素是相邻的。 2、解题思路 这个问题的核心是遍历循环数组并计算相邻…

电脑换固态硬盘

参考&#xff1a; https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种&#xff1a; 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜&#xff1a; M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…

opengrok_windows_环境搭建

软件列表 软件名下载地址用途JDKhttps://download.java.net/openjdk/jdk16/ri/openjdk-1636_windows-x64_bin.zipindex 使用java工具tomcathttps://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tomcat-9.0.98-windows-x64.zipweb服务器opengrokhttps://github.com/o…

《offer 来了:Java 面试核心知识点精讲 -- 原理篇》

在 Java 面试的战场上,只知皮毛可不行,面试官们越来越看重对原理的理解。今天就给大家分享一本能让你在面试中脱颖而出的 “武林秘籍”——《offer 来了:Java 面试核心知识点精讲 -- 原理篇》。 本书详细介绍了Java架构师在BAT和移动互联网公司面试中常被问及的核心知识,内…

Linux之网络套接字

Linux之网络套接字 一.IP地址和端口号二.TCP和UDP协议2.1网络字节序 三.socket编程的常见API四.模拟实现UDP服务器和客户端五.模拟实现TCP服务器和客户端 一.IP地址和端口号 在了解了网络相关的基础知识之后我们知道了数据在计算机中传输的流程并且发现IP地址在其中占据了确定…

迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?

【图片来源于网络&#xff0c;侵删】 这是2024年初Figure公司展示的人形机器人Figure 01&#xff0c;他可以通过观看人类的示范视频&#xff0c;在10小时内经过训练学会煮咖啡&#xff0c;并且这个过程是完全自主没有人为干涉的&#xff01; 【图片来源于网络&#xff0c;侵删】…

几何数据结构之四叉树与八叉树

几何数据结构之四叉树与八叉树 四叉树的定义四叉树深度的计算公式推导假设&#xff1a;计算过程&#xff1a;1. 划分空间&#xff1a;2. 节点容纳的最小距离&#xff1a;3. 解出深度&#xff1a;4. 考虑常数项&#xff1a; 总结&#xff1a; 八叉树 四叉树的定义 四叉树&#…

(一)相机标定——四大坐标系的介绍、对应转换、畸变原理以及OpenCV完整代码实战(C++版)

一、四大坐标系介绍 1&#xff0c;世界坐标系 从这个世界&#xff08;world&#xff09;的视角来看物体 世界坐标系是3D空间坐标&#xff0c;每个点的位置用 ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw​,Yw​,Zw​)表示 2&#xff0c;相机坐标系 相机本身具有一个坐标系&…

嵌入式知识点总结 C/C++ 专题提升(一)-关键字

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.C语言宏中"#“和"##"的用法 1.1.(#)字符串化操作符 1.2.(##)符号连接操作符 2.关键字volatile有什么含意?并举出三个不同的例子? 2.1.并行设备的硬件寄存…

重塑商业智能:大数据改变商业的十种方式

在过去几年间&#xff0c;大数据一直在改变许多公司的运营方式。大数据指的是大量且多样的数据集&#xff0c;当这些数据被妥善收集和分析时&#xff0c;人们能够从中获取有价值的洞察信息。随着大数据逐渐应用于中小型企业&#xff0c;它有望彻底变革企业运营模式。以下将介绍…

基于Spring Boot的车间调度管理系统

基于 Spring Boot 的车间调度管理系统 一、系统概述 基于 Spring Boot 的车间调度管理系统是一个为制造企业车间生产活动提供智能化调度和管理解决方案的软件系统。它利用 Spring Boot 框架的便捷性和高效性&#xff0c;整合车间内的人员、设备、物料、任务等资源&#xff0c…

Ubuntu 24.04 LTS 安装 tailscale 并访问 SMB共享文件夹

Ubuntu 24.04 LTS 安装 tailscale 安装 Tailscale 官方仓库 首先&#xff0c;确保系统包列表是最新的&#xff1a; sudo apt update接下来&#xff0c;安装 Tailscale 所需的仓库和密钥&#xff1a; curl -fsSL https://tailscale.com/install.sh | sh这会自动下载并安装 …

Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法

1.想办法进入这个界面&#xff0c;我这里是BIOS引导的是按Esc按一下就行&#xff0c;UEFI的貌似是按Shift不得而知&#xff0c;没操作过。下移到Advanced options for Ubuntu&#xff0c;按enter 2.根据使用的内核版本&#xff0c;选择带「recovery mode」字样的内核版本&#…

故障诊断 | BWO白鲸算法优化KELM故障诊断(Matlab)

目录 效果一览文章概述BWO白鲸算法优化KELM故障诊断一、引言1.1、研究背景及意义1.2、故障诊断技术的现状1.3、研究目的与内容二、KELM基本理论2.1、KELM模型简介2.2、核函数的选择2.3、KELM在故障诊断中的应用三、BWO白鲸优化算法3.1、BWO算法基本原理3.2、BWO算法的特点3.3、…

TCP状态转移图详解

状态 描述 LISTEN represents waiting for a connection request from any remote TCP and port. SYN-SENT represents waiting for a matching connection request after having sent a connection request. SYN-RECEIVED represents waiting for a confirming connect…