自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(274)
  • 资源 (2)
  • 收藏
  • 关注

原创 推荐几个给力的DeepSeek在线调用平台

目前万事万物都向 DeepSeek 靠拢,大厂接入其满血版本,微信搜一搜也植入了 DeepSeek 大模型,这场争夺还会持续。DeepSeek 备受各行业重视,待遇超过曾经的 ChatGPT。面对众多 DeepSeek 应用,普通人应从基本需求入手,因官方网站卡顿,实际测评了众多号称接入满血 DK 的应用。

2025-02-24 16:32:50 532

原创 deepSeek+xmind分分钟脑图出炉

只需 1 分钟,就能生成思维导图,内容清晰明了,使用它,你直接就能在办公室里 “封神”!Tips: 格式一定要是markdown格式,兼容xmind,点击deepSeek生成按钮,快速生成,复制其中的文本内容。输入工作指令:我需要做一份xmind思维导图,帮我把这份PDF文档做提炼与整理,采用markdown格式输出。下面的步骤超级简单,一看就会、一学就懂,本文将手把手教你,千万别错过!第二步:桌面新建文本文档,格式修改为.md格式(xmind可读取)Xmind官网地址:https://xmind.cn/

2025-02-20 14:22:45 474

原创 加载应用配置信息

private void loadApplicationConfiguration(CompositePropertySource compositePropertySource,String dataIdPrefix,NacosConfigProperties properties,Environment environment){ String fileExtension = properties.getFileExtension(); String nacosGroup = proper

2022-05-16 21:33:45 318

原创 通过轮寻实现配置信息实时的推送

class LongPollingRunnable implements Runnable{ private final int taskId; public LongPollingRunnable(int taskId){ this.taskId = taskId; } @Override public void run(){ List<CacheData> cacheDatas = new ArrayList<CacheData>()

2022-05-12 21:20:47 506

原创 给NacosConfig开启定时任务,定时检查配置信息

public class ClientWorker implements Closeable{ public ClientWorker(final HttpAgent agent,final ConfigFilterChainManager configFilterChainManager,final Properties properties){ //开启定时器,执行周期1s this.executor.scheduleWithFixedDelay(new Runnable(){

2022-05-10 20:45:21 419

原创 通过ThreadLocal维护线程封闭性

private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>(){ public Connection initialValue(){ return DriverManager.getConnection(DB_URL); }};public static Connection getConnection(){ return connecti

2022-04-17 15:39:41 235

原创 通过RestTemplate读取配置信息

初始化RestTemplate@Configurationpublic class OpenApiConfig{ @Bean public RestTemplate restTemplate(){ SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setconnectTimeout(2000); requestFactor

2022-04-06 18:05:33 302

原创 用NacosConfigService从配置中心获取配置信息

1.导入NacosClient依赖包<dependency> <grpupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.3.1</version></dependency>2.用NacosConfigService从配置中心获取配置信息@Configurationpublic

2022-03-31 12:29:57 3671

原创 给NacosConfig开启定时任务,定时检查配置信息

public class ClientWorker implements Closeable{ public ClientWorker(final HttpAgent agent,final ConfigFilterChainManager configFilterChainManager,final Properties properties){ //开启定时器,执行周期为2s this.executor.scheduleWithFixedDelay(new Runnable(){

2022-03-30 14:47:02 735

原创 用文件存储Nacos元数据

@Componentpublic class RaftStore implements Closeable{ ... private final Properties meta = new Properties(); private static final String META_FILE_NAME= DATA_BASE_DIR+File.separator+"meta.properties"; private static final String CACHE_DIR = DATA_B

2022-03-29 17:13:55 783

原创 用缓存存储Nacos元数据

@Componentpublic class DataStore{ //内存缓存对象 private Map<String,Datum> dataMap = new ConcurrentHashMap<>(1024); public void put(String key,Datum value){ dataMap.put(key,value); } public Datum remove(String key){ return dataMa

2022-03-29 16:49:31 704

原创 NacosRule实现服务发现的负载均衡

初始化NacosRule@Configurationpublic class NacosRibbonRuleConfig{ @Bean public NacosRule nacosRule(){ return new NacosRule(); } @LoadBalanced @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } //配置全局负载均衡 @Co

2022-03-27 20:02:13 474

原创 分布式系统幂等性设计及其服务端和消费端代码实现JAVA

分布式Id获取@DubboService(version="1.0.0",group="distributed-uuid-server")public class DistributedServiceImpl implements DistributedService{ @Autowired private Snowflakeconfig snowflakeConfig; Map<String,SnowFlake> snowFlakeHandlerMap = new Concur

2022-03-25 22:49:12 807

原创 通过AOP切面和事件中心拦截服务注册

@Aspectpublic class DubboServiceRegistrartionEventPublishingAspect implements ApplicationEventPublisherAware{ //定义切面,拦截Spring cloud的ServiceRegistry接口的注册方法 public static final String REGISTER_POINTCUT_EXPRESSION = "execution(* org.springframework.cloud

2022-03-24 16:29:01 656

原创 NacosRegistration类维护Nacos元数据代码逻辑

public class NacosRegistration implements Registration,ServiceInstance{ ... @PostConstruct //读取开发人员在应用的配置文件中配置的元数据 Map<String,String> metadata = nacosDiscoveryProperties.getMetadata(); Environment env = context.getEnvironment(); Str

2022-03-24 15:16:34 870

原创 表名的动态替换mysql

添加配置类@Configuration@MapperScan("com.xxx.aaa.mapper")//对应的mapper文件目录路径public class MybatisPlusConfig{ @Resource private UserService userService; @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor interceptor

2022-03-23 14:50:48 1608

原创 spring-boot多数据源

1.配置多数据源的配置信息spring: datasource: dynamic: primary:master lazy:true strict:false datasource: url:jdbc:mysql://ip:port:dataname?.......代码实现1.引入依赖<dependency> <groupId>com.baomidou</groupId> <a

2022-03-22 17:27:35 678

原创 Mybatis-plus实现乐观锁

设计思路1.取出当前需要更新的记录,并获取当前版本好version2.在更新时候带上version3.执行更新时,sql中加入如下逻辑set version = new_version where version = old_version## 代码实现2.数据库实例表当中添加字段version2.添加mybatis全局配置```java@Configurationpublic class MybatisPlusOptLockerConfig{ @Bean public

2022-03-22 17:04:30 1068

原创 订单缓冲同步到订单中心代码实例

Map<RoundRobinTable.Table,Long> lastIdMap = Maps.newHashMap();Map<RoundRobinTable.Table,Object> lastOrderIdMap = Maps.newHashMap();while(running){ RoundTable.Table table.= roundRobinTable.nextTable(); //批量查询缓冲表 List<Map<String,Obj

2022-03-16 19:05:33 540

原创 JAVA的MQ双写示例

public OrderDto create(final OrderDto order) throws OrderException{ OrderDto createOrderDto = executeInShardingTrans((status)->{ OrderDto insertOrderDto = convert(orderService.insert(order)); return insertOrderDto;});//发MQorderMqProducer.publis

2022-03-16 18:13:36 625

原创 JAVA异步Web服务实现

public void submitFuture(final HttpServletRequest req,final Callable<CompletableFuture> task) throwsException{ final String uri = req.getRequestURI(); final Map<String,String[]> params = req.getParameterMap(); final AsyncContext asyncCont

2022-03-15 15:34:44 798

原创 异步编排CompletableFuture

场景一,并发调用,结果并集处理public static void test() throws Exception{ MyService service = new MyService(); CompletableFuture<String> future1 = sevice.getData("http://www.baidu.com"); CompletableFuture<String> future2 = service.getData("www.tx.com")

2022-03-14 21:00:30 583

原创 java的异步Callback任务

public class AsyncTest{ public static HttpAsyncClient httpAsyncClient; public static CompletableFuture<String> getHttpData(String url){ CompletableFuture asyncFuture = new completableFuture(); HttpAsyncRequestProducer producer = HttpAsync

2022-03-14 19:06:14 1136

原创 异步Future并行处理业务请求代码示例

线程池配合Future实现,但是阻塞主请求线程,高并发时依然会造成线程数过多,CPU上下文切换,通过Future可以并发发出N个请求,然后等待最慢的一个返回,总响应时间为最慢的一个请求返回的用时public class Test{ final static ExecutorService executor = Executors.newFixedThreadPool(2); public static void main(String[] args){ RpcService rpc

2022-03-14 18:17:55 530

原创 java线程池的类型和创建方式

1.单线程线程池ExecutorService executorService = Executors.newSingleThreadExecutor();//等价于return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()))2.创建固定的线程池ExecutorS

2022-03-14 17:05:30 499

原创 验证数据库连接有效性Druid

public boolean validateObject(PooledObject<PoolableConnection> p){ try{ validateLifeTime(p); validateConnection(p.getObject()); return true; }catch(Exception e){ return false; }}private void validateLifetime(PooledObject<P

2022-03-13 15:22:46 1687

原创 缓存的崩溃与快速修复

取模对于取模机制,如果其中一个实例坏掉,摘除此实例将会导致大量的缓存不命中,则瞬间的大流量导致后端数据服务或后端服务出现问题,对于这种情况,可以采用主从机制来避免实例坏了的问题,其中一个实例坏了可以用从/主顶上来,但是取模机制下增加一个节点会导致大量缓存不命中,一般是建立另一个集群,然后把数据迁移到新集群,把流量迁移过去。一致性HASH对于一致性哈希,如果其中一个实例坏了,摘除此实例只影响一致性哈希上的部分缓存不命中,不会导致大量缓存瞬间回源到后端/数据库服务,但是会产生一定的影响快速恢复如果出现

2022-03-13 14:53:27 1129

原创 HttpClient当中的判断当前是否可以使用缓存代码实现

public boolean isServableFromCache(final HttpRequest request){ final String method = request.getRequestLine().getMethod(); final protocolVersion pv = request.getRequestLine().getProtocolVersion(); //如果请求不是HTTP1.1,不能走缓存 if(HttpVersion.HTTP_1_1.c

2022-03-12 19:16:41 390

原创 HttpClient客户端缓存

依赖<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient-cache</artifactId> <version>4.5.2</version></dependency>创建CacheConfig cacheConfig = CacheConfig.custom().setMaxCa

2022-03-12 01:09:38 678

原创 浏览器缓存中的ETag验证测试用例

@RequestMapping("/cache/etag")public ResponseEntity<String> cache(@RequestHeader(value="If-None-Match",required=false) String ifNoneMatch){ //浏览器验证文档内容的实体If-None-Match //当前系统时间 long now = System.currentTimeMillis(); long maxAge = 10; Strin

2022-03-11 19:51:33 408

原创 缓存应用的回写模式

异步写CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().using( PooledExecutionServiceConfigurationBuilder.newPooledExecutionServiceConfigurationBuilder().pool("writeBehindPool",1,5).build())org.ehcache.Cache<String,String> my

2022-03-11 16:07:11 338

原创 java多级缓存API封装

本地缓存初始化public class LocalCacheInitService extends BaseService{ @Override public void afterPropertiesSet() throws Exception{ //商品类目缓存 Cache<String,Object> categoryCache = CacheBuilder.newBuilder().softValues() .maximumSize(100

2022-03-10 18:57:03 437

原创 EhCache 3.x实现

CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder() .using(PooledExecutionServiceConfigurationBuilder .newPooledExecutionServiceConfigurationBuilder() .defaultPool("default",1,10).build())//磁盘存储文件的位置 .with(new CacheManagerPer

2022-03-10 16:38:28 325

原创 缓存回收策略

1.基于空间基于空间指的是设置了存储空间,如设置10m,当达到存储空间上限时,按照一定的策略进行数据移除2.基于容量基于容量指缓存设置了最大大小,当缓存的条目超过最大大小时,按照一定的策略回收数据3.基于时间3.1TTL缓存的数据从开始到到期的一个时间段,不管在这个时间段内有没有被访问,缓存数据都将过期3.2TTI空闲期,即缓存数据多久没有被访问后移除4.回收算法FIFO 先进先出,先放入缓存的先被移除FRU 最近最少使用的数据,最先被移除LFU 最不常用算法,一定时间段内使用次数最

2022-03-10 16:17:53 289

原创 服务自动切换机房代码实现

public static String get(List<String> apis,Object[] args,String encoding,Header[] headers,Integer timeout){ String response = null; for(String api: apis){ String uri = UriComponentsBuilder.fromHttpUrl(api) .buildAndExpand(args).toUriStrin

2022-03-08 15:25:09 198

原创 使用Hystrix实现熔断

public boolean allowRequst{ //如果熔断开关强制打开,熔断降级处理 if(properties.circuitBreakerForceOpen().get()){ return false; } //如果熔断开关强制闭合,则正常处理 if(properties.circuitBreakerClosed().get()){ return ture; } //正常判读啊 return !isOpen() || allowSing

2022-03-07 18:48:51 785

原创 使用Hystrix实现服务降级

public class GetStockServiceCommand extends HystrixCommand<String>{ private StockService stockService; public GetStockServiceCommand(StockService stockService){ super(setter()); this.stockService = stockService; } private static Set

2022-03-07 18:03:20 262

原创 使用配置文件实现自动降级的开关配置

应用层API封装USER{ "用户信息", “user.not.call.backend”,//是否调用后端服务 “user.call.backend.rate.limit”,//调用后端服务的限流 “user.redis.expire.seconds”,//redis缓存过期时间}其中涉及几个配置1.user.not.call.backend是否回源到调用后端用户服务,如果不开启,那么访问缓存,不会将流量打入后端2.user.call.backend.rate.limit调

2022-03-07 16:45:11 527

原创 应用节流测试代码实现

Observable. .create(new Observable.OnSubscribe<Integer>(){ @Override public void call(Subscribe<? super Integer> subscribe){ //next实现 next(subscriber,1,0); next(subscriber,2,50); next(subscribe

2022-03-06 19:56:46 119

原创 分布式系统判断是否需要对接口限流的代码实现

public static acquire() throws Exception{ String luaScript.= Files.toString(new File("limit.lua"),Charset.defaultCharset()); Jedis jedis = new Jedis("192.168.147.52",6379); //获取当前秒数 String key = "ip:"+System.currentTimeMillis()/1000; String limit

2022-03-06 17:45:51 133

java8讲义与实战全篇

涵盖JAVA8全部知识点以及实战代码

2021-12-07

JavaGuide-main.zip

「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试

2021-12-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除