“Work! ”
Java学习相关顺序

学习思路
学习完java基础之后,先学习mysql,然后稍微了解一下javaweb的层,直接去学习springboot,学完了然后往前学ssm,理解为什么springboot淘汰了以前的ssm框架,然后再往前学javaweb,理解框架的好处。这样每个学习都有目标,不至于说学习了javaweb,然后学习ssm的时候觉得之前学习的东西都白学了,学习springboot,觉得ssm白学了。
等这一套学习了完了之后,去学习设计模式,了解设计思想。然后再去学习数据结构,了解底层。最后才是jvm
从入门,到实际开发,一开始给你成就感,让你有动力继续学习下去,而不是从javaweb开始,盼着早日学到springboot,我就能够出去找工作了。
还有一点,springboot相较与javaweb和ssm,会简单很多,毕竟springboot约定大于配置。
java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。 在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding, 我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行, 什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。 spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。 项目还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。 找个小厂的工作的话,没必要全都照这些准备,重点放在框架的使用和一些基础八股吧。
java架构层次
- pojo(或entity):实体类
- util:工具类
- service:代码逻辑
- mapper:数据库接口层
- web:
表现层(servlet,SpringMVC) 业务层() 数据层(JDBC,MyBatis)
创建接口后,在接口中定义方法,在接口的实现类中实现方法
spring MVC(表现层框架)
导jar包
创建SpringMVC控制类
创建SpringMVC配置类
方法前加@controller
设置访问路径@requestmapping("/aaa")
@responsebody
get请求与post请求
rest代码风格
查询get
添加post
修改put
删除delete
静态资源放行tomcat处理
SSM整合
- spring
- springConfig
- mybatis
- mybatisConfig
- jdbcConfig
- jdbc.properties
- SpringMVC
- servletConfig
- SpringMVCConfig
功能模块
- 表与实体类
- dao(接口+自动代理)
- service(接口+实现类)
- 业务层接口测试(整合JUnit)
- controller
- 表现层接口测试(PostMan)
表现层数据封装规范
异常处理器
表现层 → 业务层:表现层接收用户请求,调用业务层的接口处理请求。
业务层 → 持久层:业务层通过调用持久层的接口(如Repository)来访问和操作数据库。
持久层 → 数据库:持久层通过JPA、MyBatis或JDBC等技术与数据库进行交互。
- 简单的流程示例:
- 用户通过浏览器发起HTTP请求。
- 控制器(Controller)接收请求,调用业务层(Service)的方法。
- 业务层(Service)处理逻辑,并可能调用持久层(Repository)进行数据库操作。
- 持久层(Repository)查询数据库或更新数据。
- 业务层(Service)将结果返回给控制器(Controller)。
- 控制器(Controller)将结果传递给视图层(View),并最终展示给用户。
MyBatisPlus
新增
删除
修改
根据id查询
查询全部
分页查询(配置拦截器)
按条件查询
代码生成器(快速搭建框架)
项目描述:
瑞吉外卖是一款专门为餐饮企业(餐厅、饭店)定制的软件产品,包括系统管理后台和移动端应用两部分。系统管理后台主要提供给餐饮企业内部员工使用,用于对餐厅的分类、菜品、套餐、订单、员工等进行管理维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。
- 开发环境:
环境(软件): JDK +MySQL +IDEA+Git+Tomcat
技术: Spring Boot、SSM、Mybatis Plus、Spring Security、Redis、Spring Cache、Swagger、Linux、ShardingJDBC、Nginx - 责任描述:
- 负责系统管理后台的员工、分类、菜品、套餐模块的编写。
- 负责移动端应用的开发,实现短信验证码登录功能。
- 开发移动端应用的菜品浏览功能,使用户可以方便地浏览菜品信息。
- 实现移动端应用中用户地址簿信息的管理功能,方便用户管理收货地址。
- 开发移动端应用的购物车功能,使用户可以方便地添加菜品到购物车并管理订单。
- 实现移动端应用中提交订单的功能,确保用户能够成功下单。
- 进行移动端应用的数据展示缓存优化,提高系统的响应速度和用户体验。
- 负责数据库主从配置以及读写分离的实现,提高数据库的性能和可靠性。
- 实现项目接口API文档生成功能,使用Swagger生成清晰明了的接口文档。
- 技术描述:
- 使用Redis缓存高频数据,并使用Spring Cache优化代码,提高系统的性能和响应速度。
- 在整个开发过程中使用Linux系统进行部署,充分利用Linux系统的稳定性和安全性。
- 使用Nginx部署前端项目,实现前后端分离的部署方式,提高系统的灵活性和可维护性。
- 使用Nginx实现反向代理和负载均衡,提高系统的并发处理能力和可用性。
- 使用ShardingJDBC实现数据库读写分离,提高数据库的读取性能和写入性能。
- 使用Spring Security框架进行权限模块的开发,采用经典的RBAC模型进行精细的权限管理。
- 使用YApi实现前后端分离开发,并使用Swagger生成接口API文档,提高团队的协作效率。
- 使用Git进行项目的版本控制和代码管理,充分利用分支功能进行项目优化和问题修复。
Controller 接收请求,调用 Service 层处理业务逻辑。
Service 层调用 Mapper 层进行数据库操作。
Mapper 层操作 Entity 对象,与数据库交互。
DTO 用于在 Controller 和 Service 之间传递数据。
Utils 和 Common 提供通用的工具和常量,供其他层级使用。
Config 定义全局配置,Filter 处理请求和响应的拦截逻辑。
- common:
- 功能:存放项目中通用的工具类、常量、枚举、异常处理等。
- 示例:自定义异常类、全局常量、通用工具类等。
- config:
- 功能:存放项目的配置类,用于配置Spring Boot应用的各种行为。
- 示例:数据库配置、安全配置、Swagger配置、自定义Bean配置等。
- controller:
- 功能:负责处理HTTP请求,接收前端传递的参数,调用Service层处理业务逻辑,并返回结果。
- 示例:RESTful API接口、请求参数校验、返回JSON数据等。
- dto:
- 功能:存放数据传输对象(Data Transfer Object),用于在不同层之间传递数据,通常用于封装请求和响应的数据。
- 示例:前端传递的请求参数封装、返回给前端的响应数据封装等。
- entity:
- 功能:存放与数据库表对应的实体类,通常使用JPA或MyBatis等ORM框架进行映射。
- 示例:数据库表的实体类,包含字段、getter/setter方法等。
- filter:
- 功能:存放过滤器类,用于在请求到达Controller之前或响应返回客户端之前进行一些处理,如日志记录、权限校验等。
- 示例:自定义过滤器、拦截器等。
- mapper:
- 功能:存放与数据库交互的接口或类,通常使用MyBatis或JPA进行数据库操作。
- 示例:MyBatis的Mapper接口、JPA的Repository接口等。
- service:
- 功能:负责业务逻辑的处理,通常被Controller层调用,并调用Mapper层进行数据持久化操作。
- 示例:业务逻辑处理、事务管理、调用Mapper层接口等。
- utils:
- 功能:存放项目中常用的工具类,提供一些通用的方法供其他模块调用。
- 示例:日期处理工具类、字符串处理工具类、加密解密工具类等。
后端代码部署tomcat
前端代码部署nginx
docker相关配置与命令
docker源:
|
|
- docker自定义tag:
|
|
- docker镜像上传到hub:
|
|
- 查看容器ip:
|
|
- 创建Docker网络
|
|
- 查看所有网络:
|
|
- 删除对应网络:
|
|
- 进入容器内部:
|
|
- 启动redis容器:
|
|
- 启动mysql容器:
|
|
rabbitmq
创建一个目录用于挂载 RabbitMQ 数据: mkdir -p /usr/local/docker/rabbitmq 启动 RabbitMQ 容器 使用以下命令启动一个新的 RabbitMQ 容器:
|
|
在这条命令中,我们做了以下配置:
- -id:以交互模式启动容器并在后台运行。
- –name=rabbitmq:为容器指定一个名称。
- -v /usr/local/docker/rabbitmq:/var/lib/rabbitmq:将主机目录挂载到容器内的 /var/lib/rabbitmq,用于持久化数据。
- -p 15672:15672:映射 RabbitMQ 管理页面端口。
- -p 5672:5672:映射 RabbitMQ 消息接收端口。
- -e RABBITMQ_DEFAULT_USER=admin:设置默认用户名。
- -e RABBITMQ_DEFAULT_PASS=admin:设置默认密码。
CentOs下redis设置
中文官网
进入路径:/usr/local/redis-4.0.0/src
运行命令:src/redis-server ./redis.conf
修改为后台运行:/usr/local/redis-4.0.0/redis.conf
配置修改:daemonize yes
密码:123456
退出:redis-cli -h 你的IP地址 -p 你的redis端口号 shutdown
设置允许远程链接:127.0.0.1添加注释#
./redis-cli.exe -h 192.168.179.135 -p 6379 -a 123456
centOs关闭防火墙:firewall-cmd –zone=public –add-port=6379/tcp –permanent
centOs重启防火墙:firewall-cmd –reload
centOs关机:shutdown -h now
redis
启动数据库:systemctl start mysqld
update user set authentication_string=passworD(“root”) where user=‘root’;
–name:容器名称
-p 6379:6379 将端口设置为6379
-it参表示控制台显示Redis安装的交互信息
如果后台运行,用-d参数
-v /data/redis-data 将redis数据挂载到根目录的 /data/redis-data 目录下
-v $PWD/data/redis-data 将redis数据挂载到当前目录的data/redis-data 目录下
–requitepass “123456” : 指定redis连接密码,此参数要放在镜像名后面
Nginx
安装依赖:yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
docker cp nginx:/var/log/nginx C:\afordocker\nginx\log
docker cp nginx:/usr/share/nginx/html C:\afordocker\nginx
docker cp nginx:/etc/nginx/nginx.conf C:\afordocker\nginx\conf
docker cp nginx:/etc/nginx/conf.d C:\afordocker\nginx\conf\conf.d
docker run -d –name nginx -p 8880:80
-v C:\afordocker\nginx\conf\nginx.conf:\etc\nginx\nginx.conf
-v C:\afordocker\nginx\conf\conf.d:\etc\nginx\conf.d
-v C:\afordocker\nginx\log\log:\var\log\nginx
-v C:\afordocker\nginx\log\html:\usr\share\nginx\html
–privileged=true ayljzj/nginx:1.24.0
Windows下docker的Mysql(5.7)主从辅助(一主一从)
1、拉取Mysql镜像
|
|
2、启动Mysql容器
- 先启动mysql-master容器:(即之后的主机)
|
|
- 先启动mysql-slave容器:(即之后的从机)
|
|
命令解释:
- -d: 后台运行容器,并返回容器ID
- -p 3307:3306 :将容器的3306端口映射到宿主机3307端口
- –name mysql-slave:将容器命名为mysql-slave
- -e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码
- ayljzj/mysql:5.7:使用该镜像
3、编写主从复制文件
对主库文件进行如下配置:
找到file中的/etc/my.cnf文件,将以下内容复制进去
|
|
对从库文件进行如下配置:
找到file中的/etc/my.cnf文件,将以下内容复制进去
|
|
4、搭建主从复制
4.1、主机设置
进入主机容器:
|
|
连接容器:
|
|
4.2、主机上建立帐户并授权(slave)
给从机授权,为了让从机能够和主机连接起来。 创建账户:slave,设置密码:123456
|
|
对slave账户进行授权
|
|
或者二者代码写为一行:
|
|
GRANT REPLICATION SLAVE ON . TO ‘slave’@’%’ IDENTIFIED BY ‘123456’;
4.3、查询master状态
|
|
记录出现的File和Position的值,后续要用
注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化!
4.4、从机设置
进入从机容器:
|
|
进入容器后输入以下命令:
|
|
若在这里出现错误,先执行完下面两条命令重置:
|
|
完成后,启动从服务器复制功能
|
|
查看从服务器状态
|
|
观察输出的结果,下面两个参数都是Yes,则说明主从配置成功!
Slave_IO_Running: Yes,Slave_SQL_Running: Yes