《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
5.1.6
com.baomidou
mybatis-plus-boot-starter
3.4.2
com.baomidou
mybatis-plus-extension
3.3.0
compile
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-seata
org.apache.maven.plugins
maven-compiler-plugin
1.81.8
src/main/java
**/*.xml
product-service 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”>
springcloudalibaba-seata
com.xuweichao
1.0-SNAPSHOT
4.0.0
product-service
pom
product-service-client
product-service-server
product-service-server 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”>
product-service
com.xuweichao
1.0-SNAPSHOT
4.0.0
product-service-server
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
5.1.6
com.baomidou
mybatis-plus-boot-starter
3.4.2
com.baomidou
mybatis-plus-extension
3.3.0
compile
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-seata
com.xuweichao
product-service-client
1.0-SNAPSHOT
org.apache.maven.plugins
maven-compiler-plugin
1.81.8
src/main/java
**/*.xml
product-service-client 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”>
product-service
com.xuweichao
1.0-SNAPSHOT
4.0.0
com.xuweichao
product-service-client
jar
com.baomidou
mybatis-plus-annotation
3.3.0
compile
com.baomidou
mybatis-plus-extension
3.3.0
compile
org.springframework.cloud
spring-cloud-starter-openfeign
数据库建表:订单表 产品表
CREATE TABLE order_base
(
id
bigint(20) NOT NULL AUTO_INCREMENT,
user_name
varchar(10) DEFAULT NULL,
p_id
bigint(20) DEFAULT NULL,
p_name
varchar(50) DEFAULT NULL,
p_price
double(10,2) DEFAULT NULL,
number
int(11) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
CREATE TABLE product_base
(
id
bigint(20) NOT NULL AUTO_INCREMENT,
name
varchar(100) DEFAULT NULL,
price
double(10,2) DEFAULT NULL,
stock
int(11) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4
使用 代码生成工具生成数据库试题对象和 service
order-service 微服务 添加配置 application.yml
spring:
application:
name: order-service
datasource:
driver-class-name: com.mysql.jdbc.Driver
password: xxx
url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/database-name?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
server:
port: 18080
swagger:
enable: true
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
product-service 微服务 添加配置 application.yml
spring:
application:
name: product-service
datasource:
driver-class-name: com.mysql.jdbc.Driver
password: xxx
url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/database-name?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
server:
port: 18080
swagger:
enable: true
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
product-service-server 添加接口:
@Slf4j
@Api(value = “ProductBase 相关接口”, tags = “ProductBase 相关接口”)
@RestController
@RequestMapping(“product”)
public class ProductBaseController implements ProductServiceClient {
@Autowired
public IProductBaseService productBaseService;
@Override
@ApiOperation(value = “详情”)
@GetMapping(“detail/{id}”)
public ProductBase getProductBase(@PathVariable Long id) {
log.info(“获取的参数:===>>” + id);
return productBaseService.getById(id);
}
@Override
@ApiOperation(value = “修改库存”)
@GetMapping(“{id}”)
public Boolean productUpdateStock(@PathVariable Long id) {
log.info(“获取的参数:===>>” + id);
ProductBase productBase = productBaseService.getById(id);
productBase.setStock(productBase.getStock()-1);
return productBaseService.updateById(productBase);
}
}
在product-service-client 添加 Feign 服务接口
@Component
@FeignClient(name = “product-service”,path = “/product/”)
public interface ProductServiceClient {
@GetMapping(“detail/{id}”)
ProductBase getProductBase(@PathVariable(“id”) Long id);
@GetMapping(“/{id}”)
Boolean productUpdateStock(@PathVariable(“id”) Long id);
}
order-service 中创建接口
@Slf4j
@Api(value = “OrderBase 相关接口”, tags = “OrderBase 相关接口”)
@RestController
@RequestMapping(“order”)
public class OrderBaseController {
@Resource
public IOrderBaseService orderBaseService;
@ApiOperation(value = “添加”, notes = “添加”)
@GetMapping(“{pid}”)
public Boolean orderBaseSave(@PathVariable Long pid) {
log.info(“获取的参数:===>>” + pid);
return orderBaseService.createOrder(pid);
}
}
OrderServiceImpl:
@Service
public class OrderBaseServiceImpl extends ServiceImpl<OrderBaseMapper, OrderBase> implements IOrderBaseService {
@Autowired
private ProductServiceClient productServiceClient;
@Override
public Boolean createOrder(Long pid) {
ProductBase productBase = productServiceClient.getProductBase(pid);
OrderBase orderBase=new OrderBase();
orderBase.setNumber(2);
orderBase.setPId(productBase.getId());
orderBase.setPName(productBase.getName());
orderBase.setPPrice(productBase.getPrice());
orderBase.setUserName(“超超”);
this.save(orderBase);
productServiceClient.productUpdateStock(orderBase.getPId());
return Boolean.TRUE;
}
}
这里是模拟的创建订单和减库存的操作
安装Seata
=======
下载
–
下载地址: https://github.com/seata/seata/releases/v0.9.0/
进入conf 目录修改配置文件register.conf,我们这里是用nacos 作为注册和配置中心的,所以精简一下配置
registry {
type = “nacos”
nacos {
serverAddr = “localhost”
namespace = “public”
cluster = “default”
}
}
config {
type = “nacos”
nacos {
serverAddr = “localhost”
namespace = “public”
cluster = “default”
}
}
初始Seata配置
进入 seata-0.9.0\server\src\main\resources 目录 找到 nacos-config.txt 文件
第一个箭头哪里代表事务组
这里的语法为: service.vgroup_mapping.${your - service - gruop}=default ,中间的
${your - service - gruop} 为自己定义的服务组名称, 这里需要我们在程序的配置文件中配置。
store 那里改成自己的数据源配置,并建表
– the table to store GlobalSession data
DROP TABLE IF EXISTS global_table
;
CREATE TABLE global_table
(
xid
VARCHAR(128) NOT NULL,
transaction_id
BIGINT,
status
TINYINT NOT NULL,
application_id
VARCHAR(32),
transaction_service_group
VARCHAR(32),
transaction_name
VARCHAR(128),
timeout
INT,
begin_time
BIGINT,
application_data
VARCHAR(2000),
gmt_create
DATETIME,
gmt_modified
DATETIME,
PRIMARY KEY (xid
),
KEY idx_gmt_modified_status
(gmt_modified
, status
),
KEY idx_transaction_id
(transaction_id
)
);
– the table to store BranchSession data
DROP TABLE IF EXISTS branch_table
;
CREATE TABLE branch_table
(
branch_id
BIGINT NOT NULL,
xid
VARCHAR(128) NOT NULL,
transaction_id
BIGINT ,
resource_group_id
VARCHAR(32),
resource_id
VARCHAR(256) ,
lock_key
VARCHAR(128) ,
branch_type
VARCHAR(8) ,
status
TINYINT,
client_id
VARCHAR(64),
application_data
VARCHAR(2000),
gmt_create
DATETIME,
gmt_modified
DATETIME,
PRIMARY KEY (branch_id
),
KEY idx_xid
(xid
)
);
– the table to store lock data
DROP TABLE IF EXISTS lock_table
;
CREATE TABLE lock_table
(
row_key
VARCHAR(128) NOT NULL,
xid
VARCHAR(96),
transaction_id
LONG ,
branch_id
LONG,
resource_id
VARCHAR(256) ,
table_name
VARCHAR(32) ,
pk
VARCHAR(36) ,
gmt_create
DATETIME ,
gmt_modified
DATETIME,
PRIMARY KEY(row_key
)
);
创建undo_log 表用于事务回滚
CREATE TABLE undo_log
(
id
bigint(20) NOT NULL AUTO_INCREMENT,
branch_id
bigint(20) NOT NULL,
xid
varchar(100) NOT NULL,
context
varchar(128) NOT NULL,
rollback_info
longblob NOT NULL,
log_status
int(11) NOT NULL,
log_created
datetime NOT NULL,
log_modified
datetime NOT NULL,
ext
varchar(100) DEFAULT NULL,
PRIMARY KEY (id
),
UNIQUE KEY ux_undo_log
(xid
,branch_id
)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
# 初始化 seata 的 nacos 配置
# 注意 : 这里要保证 nacos 是已经正常运行的
cd conf
nacos-config.sh 127.0.0.1
执行之后 在nacos 中就能看上最上边图中展示的效果了。
启动seata,进入 seata-server-0.9.0\seata\bin 目录执行
seata-server.bat -p 9000 -m file
将register.conf 文件分别拷贝到 order-service 和product-service-server 微服务 的resources 目录下
添加服务注册发现和 Seata事务组
分别在两个微服务resources目录下创建 bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: public
group: SEATA_GROUP
discovery:
server-addr: 127.0.0.1:8848
alibaba:
seata:
tx-service-group: product_service_group
2021年Java中高级面试必备知识点总结
在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。
本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。
目录:
(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)
部分内容:
对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。
不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
录下
添加服务注册发现和 Seata事务组
分别在两个微服务resources目录下创建 bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: public
group: SEATA_GROUP
discovery:
server-addr: 127.0.0.1:8848
alibaba:
seata:
tx-service-group: product_service_group
2021年Java中高级面试必备知识点总结
在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。
本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。
目录:
[外链图片转存中…(img-jJU4PHSj-1714748780561)]
(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)
[外链图片转存中…(img-wrW27soV-1714748780562)]
部分内容:
[外链图片转存中…(img-eLcfLigi-1714748780562)]
[外链图片转存中…(img-1dgp9rtg-1714748780562)]
[外链图片转存中…(img-Dy7g1v18-1714748780562)]
对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。
不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!