当前位置: 首页 > news >正文

SSM项目搭建保姆级教程

文章目录

  • 1、什么是SSM框架
    • 1.1、持久层
    • 1.2、业务层
    • 1.3、表现层
    • 1.4、View层
    • 1.5、SpringMVC执行流程
    • 1.6、MyBatis
  • 2、SSM实战搭建
    • 2.1、创建工程
    • 2.2、添加依赖
    • 2.3、配置spring.xml文件
    • 2.4、配置web.xml文件
    • 2.5、log4j.properties
    • 2.6、准备表
    • 2.7、实体类
    • 2.8、mapper
    • 2.9、service
    • 2.10、controller
    • 2.11、前端页面
      • 1、index.html
      • 2、addUser.jsp
      • 3、queryUser.jsp
      • 4、success.jsp和fail.jsp
    • 2.12、项目结构
    • 2.13、部署
      • 1、tomcat准备
      • 2、IDEA配置Tomcat
      • 3、运行
      • 4、Tomcat乱码问题

1、什么是SSM框架

  1. SSM框架是Spring、Spring MVC 和MyBatis框架的整合,是标准的MVC模式
  2. 标准的SSM框架有四层,分别是dao层(mapper),service层,controller层和View层
  3. 使用spring实现业务对象管理,使用spring MVC负责请求的转发和视图管理,mybatis作为数据对象的持久化引擎

1.1、持久层

持久层,也就是我们常说的dao层或者mapper层

作用:主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此

  • Dao层首先设计的是接口,然后再Spring的配置文件中定义接口的实现类
  • 然后可以在模块中进行接口的调用来进行数据业务的处理(不在关心接口的实现类是哪个类)
  • 数据源的配置以及有关数据库连接的参数都在Spring的配置文件中进行配置

1.2、业务层

业务层,也就是我们常说的service层

作用:Service层主要负责业务模块的逻辑应用设计

  • 先设计接口然后再设计实类,然后再在Spring的配置文件中配置其实现的关联
  • 业务逻辑层的实现具体要调用到自己已经定义好的Dao的接口上,这样就可以在应用中调用Service接口来进行业务处理
  • 建立好Dao之后再建立service层,service层又要在controller层之下,因为既要调用Dao层的接口又要提供接口给controller层,每个模型都有一个service接口,每个接口分别封装各自的业务处理的方法

1.3、表现层

表现层,也就是我们常说的Controller层

作用:负责具体的业务模块流程的控制

  • 配置也同样是在Spring的配置文件里面进行
  • 调用Service层提供的接口来控制业务流程
  • 业务流程的不同会有不同的控制器,在具体的开发中可以将我们的流程进行抽象的归纳,设计出可以重复利用的子单元流程模块

1.4、View层

作用:主要和控制层紧密结合,主要负责前台jsp页面的表示

各层之间的关系:

image-20221228114700648

1.5、SpringMVC执行流程

复杂版:

1、 用户发送请求至前端控制器DispatcherServlet
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
4、 DispatcherServlet调用HandlerAdapter处理器适配器
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
6、 Controller执行完成返回ModelAndView
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、 ViewReslover解析后返回具体View
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)
11、 DispatcherServlet响应用户

简单版:

1.客户端发送请求到DispacherServlet(分发器)
2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller
3.Controller调用业务逻辑处理后,返回ModelAndView
4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图
5.视图负责将结果显示到客户端

1.6、MyBatis

  • MyBatis是对jdbc的封装,它让数据库底层操作变的透明
  • MyBatis的操作都是围绕一个SqlSessionFactory实例展开的
  • MyBatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射
  • 在每次与数据库交互时,通过SqlSessionFactory拿到一个SqlSession,再执行sql命令
  • 所以,MyBatis的核心是SqlSession

2、SSM实战搭建

搭建思路如下:

image-20221229085956979

2.1、创建工程

image-20221228123037107

image-20221228123137046

image-20221228123228941

新建完成后工程目录结构如下:

image-20221228123430878

然后替换web.xml中的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
</web-app>

2.2、添加依赖

在pom.xml中添加依赖,如下:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.itsource</groupId><artifactId>SSMTest</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>SSMTest Maven Webapp</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!--spring-webmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.15.RELEASE</version></dependency><!--mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!--mybatis和spring整合的依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!--druid连接池依赖--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.1</version></dependency><!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><!--jackson java对象转换为json对象 @ResponseBody--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.2.2</version></dependency><!--servlet-api依赖--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.15.RELEASE</version></dependency><!--sql日志--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version></dependency></dependencies></project>

2.3、配置spring.xml文件

在main目录下,新建java和resources目录,如下:(如果有就不需要新建了)

image-20221228123823850

然后在resources目录下新建spring.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--包扫描--><context:component-scan base-package="cn.itsource" /><!-- 声明视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!--静态资源放行--><mvc:default-servlet-handler /><!-- 声明springmvc注解驱动 --><mvc:annotation-driven /><!--数据源配置--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ssmtest?serverTimezone=Asia/Shanghai"/><property name="username" value="root"/><property name="password" value="123456"/><!--初始化连接数量:根据你项目的并发进行评估--><!--最少连接池的个数--><property name="minIdle" value="5"/><!--初始的连接池的个数--><property name="initialSize" value="5"/><!--最大的连接个数--><property name="maxActive" value="10"/><!--超过的最大连接池个数,等待时间 单位是毫秒--><property name="maxWait" value="3000"/></bean><bean id="sessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean"><!--设置数据源--><property name="dataSource" ref="dataSource" /><!--设置mybatis映射文件的路径--><property name="mapperLocations" value="classpath:mapper/*.xml" /></bean><!--为dao接口生成代理实现类--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="cn.itsource.dao" /></bean></beans>

2.4、配置web.xml文件

web.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--servlet--><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 声明字符集过滤器 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param><param-name>forceRequestEncoding</param-name><param-value>true</param-value></init-param><init-param><param-name>forceResponseEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

2.5、log4j.properties

在resources目录下新建log4j.properties文件,内容如下:

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

2.6、准备表

在本地MySQL服务器中新建数据库【ssmtest】,然后新建表【t_user】,建表语句如下:

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',`age` int(3) NULL DEFAULT NULL COMMENT '年龄',`intro` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '个人简介',PRIMARY KEY (`id`) USING BTREE,INDEX `idx_user_username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC;

2.7、实体类

package cn.itsource.entity;import lombok.Data;/*** <p>用户信息表对应实体类</p>** @author 波波老师(微信 : javabobo0513)*/
@Data
public class User {private Long id;private String username;private String sex;private Integer age;private String intro;
}

2.8、mapper

在dao包下新建UserMapper类,代码:

package cn.itsource.dao;import cn.itsource.entity.User;
import java.util.List;/*** <p>UserMapper</p>** @author 波波老师(微信 : javabobo0513)*/
public interface UserMapper {//保存用户信息到数据库int saveUser(User user);//查询数据库中所有用户信息List<User> selectAllUser();
}

在resources下的mapper文件夹中新建UserMapper.xml文件,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itsource.dao.UserMapper"><!-- 使用 insert、update、delete、select 标签编写sql语句 --><!--保存用户信息到数据库--><insert id="saveUser">insert into t_user(username, sex, age, intro) values (#{username}, #{sex}, #{age}, #{intro})</insert><!--查询所有用户信息--><select id="selectAllUser" resultType="cn.itsource.entity.User">select id, username, sex, age, intro from t_user order by id desc</select>
</mapper>

2.9、service

在service包下新建UserService类:代码如下:

package cn.itsource.service;import cn.itsource.entity.User;
import java.util.List;/*** <p>UserService</p>** @author 波波老师(微信 : javabobo0513)*/
public interface UserService {//保存用户信息到数据库int saveUser(User user);//查询数据库中所有用户信息List<User> selectAllUser();
}

然后在service包下新建impl包,其下新建UserServiceImpl类,代码如下:

package cn.itsource.service.impl;import cn.itsource.dao.UserMapper;
import cn.itsource.entity.User;
import cn.itsource.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;/*** <p>UserServiceImpl</p>** @author 波波老师(微信 : javabobo0513)*/
@Service
public class UserServiceImpl implements UserService {//注入 UserMapper 对象@Resourceprivate UserMapper userMapper;@Overridepublic int saveUser(User user) {return userMapper.saveUser(user);}@Overridepublic List<User> selectAllUser() {return userMapper.selectAllUser();}
}

2.10、controller

在controller包下新建UserController类,代码如下:

package cn.itsource.controller;import cn.itsource.entity.User;
import cn.itsource.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.util.List;/*** <p>UserController</p>** @author 波波老师(微信 : javabobo0513)*/
@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;/*** 新增用户* @param user* @return*/@PostMapping("/saveUser")public ModelAndView saveUser(User user){ModelAndView mv = new ModelAndView();int saveCount = userService.saveUser(user);if(saveCount > 0){mv.addObject("msg", "新增用户成功");mv.setViewName("success");}else{mv.addObject("msg", "新增用户失败");mv.setViewName("fail");}return mv;}/*** 查询所有用户信息* @param user* @return*/@GetMapping("/selectAllUser")public List<User> selectAllUser(User user){List<User> userList = userService.selectAllUser();return userList;}
}

2.11、前端页面

1、index.html

首先改造webapp目录下的index.html文件,内容如下:

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%String basePath=request.getScheme() + "://" + request.getServerName()+ ":" + request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head><base href="<%=basePath%>"><title>SSM实战案例</title>
</head>
<body>
<div align="center"><p>SSM整合小案例</p><table><tr><td><a href="addUser.jsp">注册用户</a></td><td><br/></td><td><a href="queryUser.jsp">查询用户</a></td></tr></table>
</div>
</body>
</html>

效果如下:

image-20221228143114725

2、addUser.jsp

在webapp目录下新建文件addUser.jsp,用来新增用户,代码如下:

<%@ page contentType="text/html;charset=utf-8" language="java"%>
<html>
<head><title>注册用户</title>
</head>
<body>
<div align="center"><p>注册用户</p><form action="user/saveUser" method="post"><table><tr><td>姓名:</td><td><input type="text" name="username"></td></tr><tr><td>年龄:</td><td><input type="text" name="age"></td></tr><tr><td>性别:</td><td><input type="text" name="sex"></td></tr><tr><td>简介:</td><td><input type="text" name="intro"></td></tr><tr><td></td><td><input type="submit" value="注册"></td></tr></table></form>
</div>
</body>
</html>

效果如下:

image-20221228143042628

3、queryUser.jsp

在webapp目录下新建文件queryUser.jsp,用来查询所有用户,代码如下:

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%String basePath=request.getScheme() + "://" + request.getServerName()+ ":" + request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head><base href="<%=basePath%>"><title>查询学生</title><%--<script type="text/javascript" src="js/jquery-3.6.0.js"></script>--%><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script type="text/javascript">$(function () {$("#myBtn").on("click",function () {$.ajax({url: "user/selectAllUser",dataType: "json",success: function (resp) {$("#userInfo").empty();$.each(resp, function (i,n) {$("#userInfo").append("<tr><td>" + n.id + "</td>" +"<td>" + n.username + "</td>" +"<td>" + n.age + "</td>" +"<td>" + n.sex + "</td>" +"<td>" + n.intro + "</td></tr>");})}})})})</script><style>.tdStyle{width: 100px;}</style>
</head>
<body>
<div align="center"><p>用户列表 <button id="myBtn">获取用户信息</button></p><table><thead><tr><td class='tdStyle'>id</td><td class='tdStyle'>姓名</td><td class='tdStyle'>年龄</td><td class='tdStyle'>性别</td><td class='tdStyle'>简介</td></tr></thead><tbody id="userInfo"></tbody></table>
</div>
</body>
</html>

效果如下:

image-20221228143206573

4、success.jsp和fail.jsp

在webapp - WEB-INF目录下新建success.jsp和fail.jsp文件,内容分别如下:

success.jsp:

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head><title>success</title>
</head>
<body>
<h3>结果:${msg}</h3>
</body>
</html>

效果:

image-20221228143322002

fail.jsp:

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head><title>fail</title>
</head>
<body>
<h3>结果:${msg}</h3>
</body>
</html>

2.12、项目结构

目前项目结构如下:

image-20221228143711302

2.13、部署

1、tomcat准备

本地部署到tomcat,首先需要你本地有tomcat服务器,下载地址:

链接:https://pan.baidu.com/s/1VpRboSME8R64yhXE4MwxiA

提取码:nr43

下载下来后,直接解压即可,如下:

image-20221228143542493

我这里使用的tomcat版本是:8.5.75

2、IDEA配置Tomcat

按照下面步骤一步一步做就可以在IDEA中配置好tomcat了

image-20221228143824954

image-20221228143909733

image-20221228144038540

image-20221228144206292

image-20221228144228706

image-20221228144249243

image-20221228144313541

然后开始部署:

image-20221228144421773

image-20221228144449980

image-20221228144529397

然后:

image-20221228144623293

就成这样了:

image-20221228144659317

3、运行

image-20221228144807680

image-20221228145017340

启动成功后,会自动打开页面,如下:

image-20221228145038065

到此,我们的SSM项目就部署完毕,可以正常使用了

4、Tomcat乱码问题

上面我们可以看到,Tomcat启动后,控制台打印的日志出现了乱码,按照下面方式做即可

打开tomcat安装目录下conf下的logging.properties文件:

image-20221228150624243

将该配置文件中的UTF-8全部改成GBK

然后再重启一下Tomcat,就会发现已经没有乱码了:

image-20221228150830314

如果按照上面设置后还没有好的话,就继续设置:

查看下IDEA的字集是不是UTF-8,确认一下,不是的话,改成UTF-8:

image-20221228145524466

打开IDEA的安装目录下的bin目录,打开里面的idea64.exe.vmoptions文件:

image-20221228145746705

添加内容:

-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8

相关文章:

SSM项目搭建保姆级教程

文章目录1、什么是SSM框架1.1、持久层1.2、业务层1.3、表现层1.4、View层1.5、SpringMVC执行流程1.6、MyBatis2、SSM实战搭建2.1、创建工程2.2、添加依赖2.3、配置spring.xml文件2.4、配置web.xml文件2.5、log4j.properties2.6、准备表2.7、实体类2.8、mapper2.9、service2.10、…...

LeetCode 350. 两个数组的交集 II

原题链接 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 给你两个整数数组 nums1nums1nums1 和 nums2nums2nums2 &#xff0c;请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数&#xff0c;应与元素在两个数组中都出现的次数一致&#xff08;如果出现…...

Python可以解码吗,解码打码是如何实现的

前言 咳咳&#xff0c;进来的铁汁都是抱着学习的心态进来看的吧&#xff0c;咱今天不讲解解码&#xff0c;咱来说说python如何来实现打码功能~ 这一个个进来的 都是标题党吧哈哈哈 有兴趣的可以继续看看哦 最近重温了一档综艺节目 至于叫什么 这里就不细说了 老是看着看着就…...

Jackson 序列化:Cannot deserialize value of type `java.time.LocalDateTime`

问题描述 使用 jackson 反序列化异常如下&#xff1a; Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type java.time.LocalDateTime from String “2023-02-13 19:43:01”: Failed to deserialize java.time.LocalDat…...

机试_3_数据结构(一)_习题

数据结构&#xff08;一&#xff09;——练习题 学习完第三章-数据结构&#xff08;一&#xff09;之后&#xff0c;当然要做相应地练习啦~ 注&#xff1a;上述习题都可以在牛客进行测试。 例如&#xff0c;第2题链接&#xff1a;计算表达式_牛客题霸_牛客网 (nowcoder.com)…...

《Hadoop篇》------HDFS与MapReduce

目录 一、HDFS角色职责总结 二、CheckPoint机制 三、Mapreduce序列化 四、Mapper 4.1、官方介绍 4.2、Split计算 4.3、Split和block对应关系 4.4、启发式算法 五、MapTask整体的流程 六、压缩算法 6.1、压缩算法适用场景 6.2、压缩算法选择 6.2.1、Gzip压缩 6.2…...

网络爬虫简介

前言 没什么可以讲的所以就介绍爬虫吧 介绍 网络爬虫&#xff08;英语&#xff1a;web crawler&#xff09;&#xff0c;也叫网路蜘蛛&#xff08;spider&#xff09;&#xff0c;是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。 网路搜索引擎等站点通过…...

通过4个月的自动化学习,现在我也拿到了25K的offer

毕业后的5年&#xff0c;是拉开职场差距的关键时期。有人通过这5年的努力&#xff0c;实现了大厂高薪&#xff0c;有人在这5年里得到贵人的赏识&#xff0c;实现了职级的快速拔升&#xff0c;还有人在这5年里逐渐掉队&#xff0c;成了职场里隐身一族&#xff0c;归于静默。 而…...

分库分表了解

数据切分根据其切分类型&#xff0c;可以分为两种方式&#xff1a;垂直&#xff08;纵向&#xff09;切分和水平&#xff08;横向&#xff09;切分一&#xff1a;垂直&#xff08;纵向&#xff09;切分【基于表或字段划分&#xff0c;表结构不同】1&#xff1a;垂直分库根据业务…...

docker中 gitlab 安装、配置和初始化

小笔记&#xff1a;gitlab配置文件 /etc/gitlab/gitlab.rb 配置项jcLee95 的CSDN博客&#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/1…...

有哪些好用的C++Json库?

文章目录RapidJSONJSON for Modern CBoost.PropertyTreeJanssonPicoJSONC REST SDKnlohmann json&#xff08;ky用的这个&#xff09;jsoncpp&#xff08;cw用的这个&#xff09;RapidJSON RapidJSON是一个快速、高效的C JSON解析器和生成器&#xff0c;支持SAX和DOM两种解析模…...

Docker 快速上手学习入门教程

目录 1、docker 的基础概念 2、怎样打包和运行一个应用程序&#xff1f; 3、如何对 docker 中的应用程序进行修改&#xff1f; 4、如何对创建的镜像进行共享&#xff1f; 5、如何使用 volumes 名称对容器中的数据进行存储&#xff1f;// 数据挂载 6、另一种挂载方式&…...

深度学习笔记:误差反向传播(1)

1 计算图 计算图使用图&#xff08;由节点和边构成的图&#xff09;来表达算式。 如图&#xff0c;我们用节点代表运算符号&#xff0c;用边代表传入的参数&#xff0c;即可算出购买苹果和橘子的总价格。 2 计算图的局部计算 局部计算意味着每个节点只处理和其相关的运算&…...

锁相环(1)

PLL代表相位锁定环。顾名思义&#xff0c;如下图所示&#xff0c;PLL是一种具有反馈循环的电路&#xff0c;可将反馈信号的相/频率保持与参考输入信号的相/频率相同&#xff08;锁定&#xff09;。 如下图所示&#xff0c;如果参考输入和反馈输入之间存在相位差&#xff0c;则…...

2023金三银四跳槽必会Java核心知识点笔记整理

现在互联网大环境不好&#xff0c;互联网公司纷纷裁员并缩减 HC&#xff0c;更多程序员去竞争更少的就业岗位&#xff0c;整的 IT 行业越来越卷。身为 Java 程序员的我们就更不用说了&#xff0c;上班 8 小时需要做好本职工作&#xff0c;下班后还要不断提升技能、技术栈&#…...

二十四节气—雨水,好雨知时节,当春乃发生。

雨水&#xff0c;是二十四节气之第2个节气。 雨水节气不仅表明降雨的开始及雨量增多&#xff0c;而且表示气温的升高&#xff0c;意味着进入气象意义的春天。 雨水节是一个非常富有想象力和人情味的节气&#xff0c;在这一天&#xff0c;不管下不下雨都充满着一种雨意蒙蒙的诗…...

为什么要使用数据库?

随着互联网技术的高速发展&#xff0c;预计2020 年底全世界网民的数量将达到 50 亿。网民数量的增加带动了网上购物、微博&#xff0c;网络视频等产业的发展。那么&#xff0c;随之而来的就是庞大的网络数据量。 大量的数据正在不断产生&#xff0c;那么如何安全有效地存储、检…...

【原创】java+swing+mysql图书管理系统设计与实现

图书管理系统是一个比较常见的系统&#xff0c;今天我们主要介绍如何使用javaswiingmysql去开发一个cs架构的图书管理系统&#xff0c;方便学生进行图书借阅。 功能分析&#xff1a; 宿舍报修管理系统的使用角色&#xff0c;一般分为管理员和学生&#xff0c;管理员主要进行学…...

图论 —— 强连通分量

概念 连通图 无向图 G G G 中,若对任意两点 V i , V j V_i, V_j V<...

计算机网络(二):物理层和链路层,通道复用,MAC地址,CSMA/CD协议,PPP点对点协议

文章目录一、物理层主机之间的通信方式通道复用技术常见的宽带接入技术二、链路层MAC地址和IP地址分别有什么作用为什么有了MAC地址之后还需要IP地址为什么有了IP地址还需要MAC地址以太网中的CSMA/CD协议数据链路层上的三个基本问题PPP协议一、物理层 主机之间的通信方式 单工…...

英语基础-定语从句的特殊用法及写作应用

1. 定语从句的引导词省略的情况 1. that 引导定语从句&#xff0c;从句中缺宾语/表语&#xff0c;that可省略&#xff1b; This is the book that he likes. I like the shirt that you gave me. We do not agree on the plan that you make. China is not the country th…...

[数据结构]---八大经典排序算法详解

&#x1f427;作者主页&#xff1a;king&南星 &#x1f3f0;专栏链接&#xff1a;c 文章目录一、八大排序算法复杂度对比二、基于比较的排序算法1.冒泡排序2.选择排序3.插入排序4.希尔排序5.直观感受四种算法的时间复杂度三、基于非比较的排序算法1.基数排序2.箱(桶)排序四…...

Go语言设计与实现 -- 反射

Go的反射有哪些应用&#xff1f; IDE中代码的自动补全对象序列化fmt函数的相关实现ORM框架 什么情况下需要使用反射&#xff1f; 不能明确函数调用哪个接口&#xff0c;需要根据传入的参数在运行时决定。不能明确传入函数的参数类型&#xff0c;需要在运行时处理任意对象。 …...

利用5G工业网关实现工业数字化的工业互联网解决方案

5G工业网关是一种用于将工业生产环境中的数据连接到工业互联网的解决方案。它可以利用高带宽、高速率、低时延的5G网络连接工业现场的PLC、传感器、工业设备和云端数据中心&#xff0c;从而实现工业数字化。 物通博联工业互联网解决方案 物通博联5G工业网关的使用步骤&#x…...

朋友当上项目测试组长了,我真的羡慕了

最近我发现一个神奇的事情&#xff0c;我一个朋友居然已经当上了测试项目组长&#xff0c;据我所知他去年还是在深圳的一家创业公司做苦逼的测试狗&#xff0c;短短8个月&#xff0c;到底发生了什么&#xff1f; 于是我立刻私聊他八卦一番。 原来他所在的公司最近正在裁员&am…...

element-ui实现动态添加表单项并实现事件触发验证验证

需求分析&#xff1a;点击新增后新增一个月度活动详情&#xff0c;提交时可同时提交多个月度活动详情。点击某一个月度活动信息的删除后可删除对应月度活动信息 H5部分&#xff1a; <el-dialog :title"title" :visible.sync"open" append-to-body>…...

ThreadLocal 内存泄漏问题

1. 认识ThreadLocal java中提高了threadlocal&#xff0c;为每个线程保存其独有的变量&#xff0c;threadlocal使用的一个小例子是&#xff1a; public class ThreadLocalTest {public static void main(String[] args) {ThreadLocal<String> threadIds new ThreadLoc…...

【算法】两道算法题根据提供字母解决解码方法和城市的天际线天际线问题

算法目录解码方法Java解答参考&#xff1a;天际线问题Java解答参考&#xff1a;大家好&#xff0c;我是小冷。 上一篇了解了项目相关的知识点 接下来看下两道算法题吧&#xff0c;用Java解答&#xff0c;可能更能激发一下大脑思考。 解码方法 题目要求&#xff1a; 一条包含…...

Python-TCP网络编程基础以及客户端程序开发

文章目录一. 网络编程基础- 什么是IP地址?- 什么是端口和端口号?- TCP介绍- socket介绍二. TCP客户端程序开发三. 扩展一. 网络编程基础 - 什么是IP地址? IP地址就是标识网络中设备的一个地址 IP地址分为 IPv4 和 IPv6 IPv4使用十进制, IPv6使用十六进制 查看本机IP地址: l…...

超低成本DDoS攻击来袭,看WAF如何绝地防护

一、DDoS攻击&#xff0c;不止于网络传输层 网络世界里为人们所熟知的DDoS攻击&#xff0c;多数是通过对带宽或网络计算资源的持续、大量消耗&#xff0c;最终导致目标网络与业务的瘫痪&#xff1b;这类DDOS攻击&#xff0c; 工作在OSI模型的网络层与传输层&#xff0c;利用协…...

做足彩网站推广/东莞网络营销全网推广

大家好&#xff0c;我是 CUGGZ。今天来分享 12 个 yyds 的微信小程序开源项目&#xff0c;速速收藏&#xff01;全文概览&#xff1a;wechat-app-mall&#xff1a;微信小程序商城&#xff1b;Vant Weapp&#xff1a;小程序 UI 组件库&#xff1b;iView Weapp&#xff1a;小程序…...

网站维护费计入什么科目/搜索量排名

2019独角兽企业重金招聘Python工程师标准>>> 1. 系统日志 tail -f /var/log/messages Apr 18 11:21:56 web5 kernel: possible SYN flooding on port 80. Sending cookies. 2.检查连接数 netstat -n | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]} TIME_W…...

企业网站的形式有哪些/互联网广告代理

前言&#xff1a;为啥要用无人值守安装系统&#xff1f;很简单的答案&#xff01;就两个&#xff01;一个是方便日常工作&#xff0c;另一个就是可以用来装逼&#xff01;常规装系统的办法有哪些&#xff1f;光盘安装系统>一个服务器DVD内置光驱百千块&#xff0c;百台服务器…...

网站销售怎么做/百度热搜榜排行

阅读本文大概需要 3 分钟&#xff0c;挑书可能需要很多分钟。六一八来了&#xff0c;现在各大平台都开始促销了&#xff0c;作为一名程序员&#xff0c;除了自己买一些大件和帮女朋友疯狂抢购&#xff0c;最好的选择就是买书好好学习技术了。关注我的朋友可能很多都是学习 Java…...

最新章节 第四百六十二章 花两亿做的网站/店铺推广软文案例

磁盘&#xff1a;磁盘上有很多小的颗粒点&#xff0c;向上是N为1&#xff0c;向上是S为0&#xff0c;要想让磁盘产生高低电压&#xff0c;就要给他一个初始电压 磁盘发生位移&#xff0c;切割磁感线&#xff0c;产生高低电压&#xff0c;传送到内存中&#xff0c;内存在传送到…...

洛阳专业网站设计开发制作建站公司/推广普通话手抄报简单漂亮

题图&#xff1a;https://unsplash.com/nielsenramon在OO(面向对象)编程中&#xff0c;类中的方法有多种形式&#xff1a;实例方法、静态方法、类方法、甚至还可以有抽象方法&#xff0c;本文来说说实例方法在Python中是如何工作的&#xff0c;后面再来谈其他方法。先来定义一个…...