分享
1、算法大厂——字节跳动面试题
2、2000页互联网Java面试题大全
3、高阶必备,算法学习
registry-type = “compact”
multi exporters use comma divided
exporter-list = “prometheus”
exporter-prometheus-port = 9898
}
support {
spring
spring {
auto proxy the DataSource bean
datasource.autoproxy = false
}
}
b.registry.conf修改
registry {
file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = “file”
nacos {
serverAddr = “localhost”
namespace = “”
cluster = “default”
}
eureka {
serviceUrl = “http://localhost:8761/eureka”
application = “default”
weight = “1”
}
redis {
serverAddr = “localhost:6379”
db = “0”
}
zk {
cluster = “default”
serverAddr = “127.0.0.1:2181”
session.timeout = 6000
connect.timeout = 2000
}
consul {
cluster = “default”
serverAddr = “127.0.0.1:8500”
}
etcd3 {
cluster = “default”
serverAddr = “http://localhost:2379”
}
sofa {
serverAddr = “127.0.0.1:9603”
application = “default”
region = “DEFAULT_ZONE”
datacenter = “DefaultDataCenter”
cluster = “default”
group = “SEATA_GROUP”
addressWaitTime = “3000”
}
file {
name = “file.conf”
}
}
config {
file、nacos 、apollo、zk、consul、etcd3
type = “file”
nacos {
serverAddr = “localhost”
namespace = “”
}
consul {
serverAddr = “127.0.0.1:8500”
}
apollo {
app.id = “seata-server”
apollo.meta = “http://192.168.1.204:8801”
}
zk {
serverAddr = “127.0.0.1:2181”
session.timeout = 6000
connect.timeout = 2000
}
etcd3 {
serverAddr = “http://localhost:2379”
}
file {
name = “file.conf”
}
}
3.创建seata数据库(mysql) 将seata->conf->db_store.sql放到数据库中运行即可
4.到bin目录下找到seata-server.bat运行即可 如下即为成功运行:
a.下载地址:https://github.com/alibaba/nacos/releases
b.修改application.properties文件(将数据库对应配置注释打开即可)
c.找到startup.cmd编辑里面的将set MODE="cluster"一行改成set MODE=“standalone”
d.点击startup.cmd运行即可,如下即为成功:
e.访问localhost:8848即可 默认账号密码都是:nacos
1.项目结构
account-service:负责对用户余扣减
business-service:负责完成下单的逻辑,包含 2 个主要的步骤,就是对库存服务和订单服务的远程调用
order-service:负责完成保存用户订单的操作
storage-service:负责完成对库存的扣减
2.各模块主要代码展示:
account-service
@Service
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountTblMapper accountTblMapper ;
private static Logger logger = LoggerFactory.getLogger(AccountServiceImpl.class) ;
@Transactional
@Override
public void debit(String userId, int money) {
logger.info(“开始扣减用户:{}的余额,数量为:{}”,userId ,money);
//1 查询数据库里面的账户
AccountTbl accountTbl = accountTblMapper.selectOne(new LambdaQueryWrapper().
eq(AccountTbl::getUserId, userId));
if(accountTbl==null){
throw new IllegalArgumentException(“此账号不存在”) ;
}
//2 扣减的操作
int idleMoney = accountTbl.getMoney() - money ;
// 3 库存的校验
if(idleMoney<0){
throw new RuntimeException(“库存不足”) ;
}
//4 设置到账户里面
accountTbl.setMoney(idleMoney);
//5 保存到数据库里里面
accountTblMapper.updateById(accountTbl) ;
if(“SXT_USER_2”.equals(userId)){
throw new RuntimeException(“不想成功”) ;
}
}
}
####Pom文件
com.baomidou
mybatis-plus-boot-starter
3.3.0
mysql
mysql-connector-java
business-service
@Service
public class BusinessServiceImpl implements BusinessService {
private static Logger logger = LoggerFactory.getLogger(BusinessServiceImpl.class) ;
@Autowired
private StorageServiceApi storageServiceApi ;
@Autowired
private OrderServiceApi orderServiceApi ;
@Override
public void purchase(String userId, String productNo, int count) {
logger.info(“准备下单,用户{},商品{},数量{}”,userId ,productNo ,count);
// 1 远程调用库存服务–> 库存的扣减f
storageServiceApi.deduct(productNo, count);
// 2 远程调用订单服务–>订单的新增
orderServiceApi.create(userId, productNo, count);
logger.info(“下单成功”);
}
}
####通过feign调用 代码:
OrderServiceApi
@Service
public class OrderServiceApi {
private static Logger logger = LoggerFactory.getLogger(OrderServiceApi.class) ;
// @Autowired
// private RestTemplate restTemplate ;
@Autowired
private OrderServiceFeign orderServiceFeign ;
public void create(String userId ,String productNo ,int count){
// ResponseEntity responseEntity = restTemplate.getForEntity(
// “http://order-service/create/{userId}/{productNo}/{count}”,
// Void.class,
// userId,
// productNo,
// count
// );
ResponseEntity responseEntity = orderServiceFeign.create(userId, productNo, count);
if(responseEntity.getStatusCode()== HttpStatus.OK){
logger.info(“远程调用订单服务成功”);
return;
}
throw new RuntimeException(“远程调用订单服务失败”) ;
}
}
StorageServiceApi
@Service
public class StorageServiceApi {
private static Logger logger = LoggerFactory.getLogger(StorageServiceApi.class) ;
// @Autowired
// private RestTemplate restTemplate ; //ribbon
@Autowired
private StorageServiceFeign storageServiceFeign ;
public void deduct(String productNo ,int count){
// ResponseEntity responseEntity = restTemplate.getForEntity(
// “http://storage-service/deduct/{productNo}/{count}”,
// Void.class,
// productNo,
// count
// );
ResponseEntity responseEntity = storageServiceFeign.deduct(productNo, count);
if(responseEntity.getStatusCode()== HttpStatus.OK){
logger.info(“远程调用库存服务成功”);
return;
}
throw new RuntimeException(“远程调用库存服务失败”);
}
}
###order-service
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderTblMapper orderTblMapper ;
@Autowired
private AccountServiceApi accountServiceApi ;
private static Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class) ;
@Transactional
@Override
public OrderTbl createOrder(String userId, String productNo, int count) {
logger.info(“开始创建一个订单,用户为{},商品为{},数量为{}”,userId,productNo,count);
// 1 扣减用户的余额 account-service - >rpc
int money = cal(productNo,count) ;
ResponseEntity responseEntity = accountServiceApi.debit(userId, money);
if(responseEntity.getStatusCode()!= HttpStatus.OK){
throw new RuntimeException(“远程扣减用户的余额失败”) ;
}
//2 写本地的订单表
OrderTbl orderTbl = new OrderTbl();
orderTbl.setUserId(userId);
orderTbl.setCommodityCode(productNo);
orderTbl.setCount(count);
orderTblMapper.insert(orderTbl) ;
logger.info(“创建订单成功,用户为{},商品为{},数量{}”,userId,productNo,count);
return orderTbl;
}
/**
-
计算商品的总价格
-
@param productNo
-
@param count
-
@return
*/
private int cal(String productNo, int count) {
独家面经总结,超级精彩
本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!
Java面试准备
准确的说这里又分为两部分:
- Java刷题
- 算法刷题
Java刷题:此份文档详细记录了千道面试题与详解;
@return
*/
private int cal(String productNo, int count) {
独家面经总结,超级精彩
本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!
[外链图片转存中…(img-EcamS3Iq-1715469439514)]
[外链图片转存中…(img-jzGLVWG5-1715469439514)]
[外链图片转存中…(img-7g3iCZls-1715469439515)]
[外链图片转存中…(img-L1zdDS4K-1715469439515)]
Java面试准备
准确的说这里又分为两部分:
- Java刷题
- 算法刷题
Java刷题:此份文档详细记录了千道面试题与详解;
[外链图片转存中…(img-c2vNq2a9-1715469439515)]
[外链图片转存中…(img-ZnZRHt3o-1715469439516)]