随笔分类 -  Java避坑100+

前辈踩过的坑
摘要:一、遇到自己不熟悉的新类,在不了解之前不要随意使用。 如CopyOnWriteArrayList,在不知晓原理之前用它大量写操作的场景解决ArrayList的线程安全,那么很可能遇到性能问题。 二、尽量使用更高层次的框架。 三、关注各种框架和组建的安全补丁和版本更新。 四、尽量少自己造轮子,使用流行 阅读全文
posted @ 2022-08-09 15:17 白玉神驹 阅读(103) 评论(0) 推荐(0)
摘要:JDK 自带工具查看 JVM 情况 常用的监控工具 使用 Wireshark 分析 SQL 批量插入慢的问题 案例: 有一个数据导入程序需要导入大量的数据,想到了使用 Spring JdbcTemplate 的批量操作功能进行数据批量导入,但是发现性能非常差,和普通的单条 SQL 执行性能差不多。 阅读全文
posted @ 2022-08-08 17:19 白玉神驹 阅读(274) 评论(0) 推荐(0)
摘要:一般上线后发版验证出问题比较多,定位到问题原因后,我们要做好记录和复盘。 每一次故障和问题都是宝贵的资源,复盘不仅仅是记录问题,更重要的是改进。 复盘时,我们需要做到以下几点: 1. 记录完整的时间线、处理措施、上报流程等信息; 2. 分析问题的根本原因; 3. 给出短、中、长期改进方案,包括但不限 阅读全文
posted @ 2022-08-08 17:00 白玉神驹 阅读(182) 评论(0) 推荐(0)
摘要:第一,考虑“鸡”和“蛋”的问题。 比如,发现业务逻辑执行很慢且线程数增多的情况时,我们需要考虑两种可能性: 一是,程序逻辑有问题或外部依赖慢,使得业务逻辑执行慢,在访问量不变的情况下需要更多的线程数来应对。比如,10TPS 的并发原先一次请求 1s 可以执行完成,10 个线程可以支撑;现在执行完成需 阅读全文
posted @ 2022-08-08 16:56 白玉神驹 阅读(180) 评论(0) 推荐(0)
摘要:不同的环境排查问题的方式 开发环境:开发工具单步调试。 测试环境:jdk自带jvisualvm或阿里的Arthas,附加到远程的JVM进程排查问题; 压测环境:造数据、造压力模拟需要的场景,遇到偶发问题,尝试造一些场景让问题更容易出现,方便测试; 生产环境:权限管控严格,一般不允许调试工具从远程附加 阅读全文
posted @ 2022-08-05 08:59 白玉神驹 阅读(64) 评论(0) 推荐(0)
摘要:Lambda表达式 Lambda 表达式使用函数式接口匹配Java的类型系统 //匿名类 new Thread(new Runnable(){ @Override public void run(){ System.out.println("hello1"); } }).start(); //Lam 阅读全文
posted @ 2022-08-01 17:34 白玉神驹 阅读(84) 评论(0) 推荐(0)
摘要:HTTPS图解 HTTP 协议传输数据使用的是明文。那在传输敏感信息的场景下,如果客户端和服务端中间有一个黑客作为中间人拦截请求,就可以窃听到这些数据,还可以修改客户端传过来的数据。这就是很大的安全隐患。 HTTPS=SSL/TLS+HTTP,通过使用一系列加密算法来确保信息安全传输,以实现数据传输 阅读全文
posted @ 2022-08-01 15:24 白玉神驹 阅读(336) 评论(0) 推荐(0)
摘要:用户名密码 md5单向加密,每条数据用不同的盐,使用慢一点的算法 如BCryptPasswordEncoder,也就是BCrypt来进行密码哈希。BCrypt 是为保存密码设计的算法,相比 MD5 要慢很多 第一,我们调用 encode、matches 方法进行哈希、做密码比对的时候,不需要传入盐。 阅读全文
posted @ 2022-08-01 15:21 白玉神驹 阅读(1841) 评论(0) 推荐(0)
摘要:SQL注入 背景 通过 sqlmap 工具可以看到几种常用注入方式,布尔盲注、时间盲注、报错注入、联合查询注入; 对于POST请求,请求没有任何返回数据、请求不会出错得情况下,仍然可以完成注入,并可以导出数据库得所有数据; 解决: 使用参数化得查询是最好得堵漏方式; 对于JdbcTemplate来说 阅读全文
posted @ 2022-02-16 14:27 白玉神驹 阅读(172) 评论(0) 推荐(0)
摘要:涉及支付代码的主要三类情况 代码本身涉及有偿使用的三方服务如采用后付款方式的结算,如果出问题没及时发现,下个月结算时会收到一笔数额巨大的账单; 代码涉及虚拟资产的发放,比如积分、优惠券等。比如优惠券可以下单使用,积分可以兑换积分商城的商品。虚拟资产就是具有一定价值的钱,但因不涉及钱和外部资金通道容易 阅读全文
posted @ 2022-02-15 10:28 白玉神驹 阅读(844) 评论(1) 推荐(1)
摘要:任何客户端传过来的数据都是不能直接信任的 1. 客户端传给服务端的数据只是信息收集, 2. 数据需要经过有效性验证、权限验证等后才能使用, 3. 并且这些数据只能认为是用户操作的意图,不能直接代表数据当前的状态。 客户端的计算不可信 @Data public class Order { privat 阅读全文
posted @ 2022-01-27 11:14 白玉神驹 阅读(69) 评论(0) 推荐(0)
摘要:常见的NoSql 1. 键值数据库 Redis、Memcached、Riak使用<key,value>键值对,通过散列表实现,用于内存缓存,如会话、配置文件、参数等;频繁读写、拥有简单数据模型的应用; 2. 列族数据库 HBase、Bigtable、Cassandra以列族式存储将同一列数据存在一起 阅读全文
posted @ 2022-01-24 10:08 白玉神驹 阅读(80) 评论(0) 推荐(0)
摘要:异步处理特点 1. 异步处理是互联网应用不可或缺的一种架构模式,大多数业务项目都是由同步处理、异步处理和定时任务处理三种模式相辅相成实现的。 2. 异步处理无需同步等待流程处理完毕,因此适用场景主要包括: 2.1 服务于主流程的分支流程。比如,在注册流程中,把数据写入数据库的操作是主流程,但注册后给 阅读全文
posted @ 2022-01-12 10:06 白玉神驹 阅读(2016) 评论(0) 推荐(0)
摘要:实现生产就绪的几个关键点 //健康检测、暴露应用信息和指标监控。 1. 健康检测可以帮我们实现负载均衡的联动; 2. 应用信息以及 Actuaor 提供的各种端点,可以帮我们查看应用内部情况,甚至对应用的一些参数进行调整; 3. 指标监控,则有助于我们整体观察应用运行情况,帮助我们快速发现和定位问题 阅读全文
posted @ 2022-01-11 11:28 白玉神驹 阅读(277) 评论(0) 推荐(0)
摘要:缓存及三个问题 1. 缓存是用空间换时间,来解决性能问题的一种架构设计模式; 2. 磁盘存储往往是原始数据,而缓存保存可以是面向呈现的数据; 3. 缓存不仅加快了IO,还减少原始数据的计算工作; 4. 缓存系统一般设计简单、功能相对单一,如Redis缓存系统整体吞吐量可达到关系型数据库的几倍甚至几十 阅读全文
posted @ 2022-01-10 09:42 白玉神驹 阅读(215) 评论(0) 推荐(0)
摘要:设计接口 1. 接口的设计需要考虑,比如接口的命名、参数列表、包装结构体、接口粒度、版本策略、冥等性实现、同步异步处理方式等。 2. 其中和接口设计相关重要的有三点:包装结构体、版本策略、同步异步处理方式。 接口的响应要明确处理结果 两个原则 1. 对外隐藏内部实现。2. 设计接口结构时,明确每个字 阅读全文
posted @ 2022-01-08 10:56 白玉神驹 阅读(1292) 评论(0) 推荐(0)
摘要:背景 //可维护性是大型项目成熟度的一个重要指标,而提升可维护性非常重要的一个手段就是减少代码重复 1. 如果多处重复代码实现完全相同的功能,很容易修改一处忘记修改另一处,造成 Bug; 2. 有一些代码并不是完全重复,而是相似度很高,修改这些类似的代码容易改(复制粘贴)错,把原本有区别的地方改为了 阅读全文
posted @ 2022-01-06 11:10 白玉神驹 阅读(650) 评论(0) 推荐(0)
摘要:AOP切入Spring Cloud Feign组件失败的情况 1. 为方便统一处理Feign,用AOP实现使用within指示器匹配feign.Client接口的实现进行AOP切入 //测试Feign @FeignClient(name = "client") public interface Cl 阅读全文
posted @ 2022-01-05 16:15 白玉神驹 阅读(776) 评论(0) 推荐(0)
摘要:IOC和AOP初衷是解耦和扩展 1. IOC是一种设计思想,使用Spring来实现IOC,是将你设计好的对象交给Spring容器控制,而不是在对象内部控制。 2. 使用IOC方便、可以实现解耦,并带来更多的可能性。 3. 如果以容器为依托管理所有的框架、业务对象,不仅可以无侵入地调整对象的关系,还可 阅读全文
posted @ 2022-01-04 11:30 白玉神驹 阅读(525) 评论(0) 推荐(0)
摘要:反射、注解和泛型遇到OOP时需要注意的问题 反射调用方法不是以传参决定重载 在获取方法的时候通过方法名和参数类型来确定的。遇到方法有包装类型和基本类型重载的时候,需要注意 @Slf4j public class ReflectionIssueApplication { private void ag 阅读全文
posted @ 2021-12-29 09:18 白玉神驹 阅读(195) 评论(0) 推荐(0)