零碎笔记(二)

算法与编程技巧精粹
列举一些常用的算法,希望能有一定的参考价值.
1.判断一个正整数是否是2的幂
boolean is2Power(int x){
     return (x &(x-1))==0;
}
x&(x-1)就是把x的最右边的一个1位变为0位,如果x为2的幂,那么就只有一个位为1,返回的结果就是0了.
注意:x必须为正整数,0也不可以.

2.判断一个正整数是否是2^n-1的形式
boolean is2PowerOne(int x){
     return x &(x+1);
}


3.判断一个正整数是否事2^j-2^k的形式,j>k>=0.

boolean is2PowerJK(int x){
     return (((x|(x-1))+1)&x)==0;
}
首先要明白要满足2j-2k的形式,x中为1的位必须连续,也就是这个样子的 00...01..10...0,明白了这一点就好办了,x-1就是改变最右边的1位以及后面的,也就是10...0变成01...1,高位不变.x|(x-1)使得x的尾0都变成了1,最后的形式是:000...011..1这个已经是2n-1的形式了,只要套用 x&(x+1)公式就可以了.
当j=k+1时,就变成了公式1了.
当k=0时,就变成公式2了.

4.求一个整数的绝对值.
int abs(int x){
    return x-((x<<1)&(x>>31));
}
当n为0时:x<<1=0,x>>31=0,结果为0.
当n为正:x>>31为0,结果为x.
当n为负:x>>31为全1,也就是-1,x-(x<<1)等于-n
不过注意的是:当Integer.MIN_VALUE<n<-230该公式不行,因为这个时候x<<1溢出了.
当x为Integer.MIN_VALUE时,返回Integer.MIN_VALUE,这个是对的.

最佳的互换操作:
A = A ^ B;
B = A ^ B;
A = A ^ B;


Java 判断字符串是否为空的三种方法
   1:if(s == null || s.equals(""));
      直观, 方便, 但效率很低.
   2:if(s == null || s.length() <= 0);
      比较字符串长度, 效率高.
   3:if(s == null || s.isEmpty());
      Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等.
   注意:if(strNewsFileName==null||strNewsFileName=="")改为if(null==strNewsFileName||"".equal(strNewsFileName)) 防止空指针或者直接用StringUtils的静态方法。< import org.apache.commons.lang.StringUtils; >


一些常用的正则表达式示例:
1、匹配所有的正数:^[0-9]+$
2、匹配所有的小数:^\-?[0-9]*\.?[0-9]*$
3、匹配所有的整数:^\-?[0-9]+$
4、提取信息中的中文字符串: [\u4e00-\u9fa5]* ;  
5、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
6、提取信息中的中国手机号码:(86)*0*13\d{9}
7、提取信息中的中国固定电话号码:(\d3,4|\d{3,4}-|\s)?\d{8}
8、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
9、提取信息中的中国身份证号码:\d{18}|\d{15}
10、提取信息中的任何数字:(-?\d*)(\.\d+)?
11、匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*)\/>/


每个Classloader运行过程,加载流程:
//检查类是否已被装载过(从cache中)
Class c = findLoadedClass(name);
if(c == null) { //指定类未被装载过
    try{
        if (parent != null){//如果父类加载器不为空,则委派给父类加载
            c = parent.loadClass(name, false);
        }else{//如果父类加载器为空,则委派给启动类加载器加载
            c = findBootstrapClass0(name);
        }
    }catch (ClassNotFoundException e){
        //启动类加载器或父类加载器抛出异常后,
        //当前类加载器将其捕获,并通过findClass方法,由自身加载
        c = findClass(name);
    }
}


内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值