<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[向阳而生]]></title><description><![CDATA[终身学习]]></description><link>https://blog.youkuaiyun.com/LyySwx</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LyySwx]]></copyright><item><title><![CDATA[618京东到家APP-门详页反爬实战]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/134055387</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/134055387</guid><author>LyySwx</author><pubDate>Thu, 26 Oct 2023 14:31:24 +0800</pubDate><description><![CDATA[在这次反爬经历中也有很多需要反思总结和提高的地方，下面列了几点给大家参考，希望本篇文章对大家有所帮助。1.要尽量防患于未然，核心系统接口提前做好反爬的一些基础工作，避免被临时杀个措手不及。2.涉及多网关的时候，要梳理爬虫的来源及特征，借助各物理网关的反爬能力，针对性的处理。3.登录态开启需要提前测试确定影响，各端是否支持，用户体验是否受损，其它反爬措施同理。4.微信小程序不能开启强登陆，会被认为违规进行处罚。]]></description><category></category></item><item><title><![CDATA[HttpMessageConverter]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/129784549</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/129784549</guid><author>LyySwx</author><pubDate>Sun, 26 Mar 2023 20:59:43 +0800</pubDate><description><![CDATA[HttpMessageConverter中看懂不同参数解析器所支持的content-Type]]></description><category></category></item><item><title><![CDATA[Mac Sublime Text编辑器 过滤所有符合条件的查找行]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/128488545</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/128488545</guid><author>LyySwx</author><pubDate>Thu, 29 Dec 2022 21:52:16 +0800</pubDate><description><![CDATA[2，⌃ ⌘ G 快速查找所有的 （⌃ 这个是control， 不是数字6上的符号）3，⌘ L 选择行（匹配查找到关键字的每一行）4，⌘ L 选择行（匹配查找到关键字的每一行）1，输入、选中要查找的字符串。1，输入、选中要查找的字符串。6，⌘ N 新打开窗口。3，⌥ ↩ 查找所有的。6，⌘ N 新打开窗口。]]></description><category></category></item><item><title><![CDATA[加密和验签]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/125663530</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/125663530</guid><author>LyySwx</author><pubDate>Tue, 09 Aug 2022 14:04:12 +0800</pubDate><description><![CDATA[区分签名与加密的概念]]></description><category></category></item><item><title><![CDATA[乐观锁-基于CAS原理]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/125634783</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/125634783</guid><author>LyySwx</author><pubDate>Wed, 06 Jul 2022 20:45:30 +0800</pubDate><description><![CDATA[乐观锁的操作过程中其实没有没有任何锁的参与，乐观锁只是和悲观锁相对，严格的说乐观锁不能称之为锁。下面我们就通过乐观锁与悲观锁的对比来更好的理解乐观锁。                    乐观锁适用于写比较少的情况下（多读场景），即冲突真的很少发生的时候，这样可以省去了锁的开销，加大了系统的整个吞吐量。但如果是多写的情况，一般会经常产生冲突，这就会导致上层应用会不断的进行retry，这样反倒是降低了性能，所以一般多写的场景下用悲观锁就比较合适。         乐观锁大部分是基于CAS来实现的，即Comp]]></description><category></category></item><item><title><![CDATA[Java程序启动后首次访问很慢--JVM预热]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/125507698</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/125507698</guid><author>LyySwx</author><pubDate>Wed, 29 Jun 2022 17:04:56 +0800</pubDate><description><![CDATA[目录导读为什么刚启动发起的请求会有损？如何预热小结      在项目部署或者重启后，机器挂到线上直接承接线上流量，会出现请求有损或者请求性能极差的情况，表现形式：max高，请求失败等，几次请求过后，线上各项指标恢复正常。 那么为什么会造成这样的情况？以及如何解决呢？         当应用的第一个请求到来，会触发逻辑相关类的第一次加载，此过程会有一定的耗时，会影响第一次调用的实时响应。这主要是因为JVM的懒加载及JIT机制
                 降低对用户请求的损耗               ]]></description><category></category></item><item><title><![CDATA[如何在Git Hub上学习开源项目+社交]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/124909027</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/124909027</guid><author>LyySwx</author><pubDate>Sun, 22 May 2022 12:45:46 +0800</pubDate><description><![CDATA[背景

Git Hub作为一个专业的开源网站，基于版本控制软件Git来实现各项功能，对于程序员来说是交流经验与学习开源项目的天堂。

但由于国内外的学习方式、编程思维均存在较大差别，导致至今仍有很多国人对于Git Hub的使用感到不解。对于如何从Git Hub上寻找符合需求的开源项目并进行阅读学习，如何为他人的项目贡献自己的力量，以及如何与其他程序员进行交流，多数人还是不了解。

笔者也经历过很长一段的迷茫期，现在才敢写出一些个人心得，以帮助大家少走弯路。

前提条件

会基础Git命令、make命令
	已]]></description><category></category></item><item><title><![CDATA[处理泛型反序列化-fastjson-TypeReference]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/124859417</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/124859417</guid><author>LyySwx</author><pubDate>Thu, 19 May 2022 11:29:23 +0800</pubDate><description><![CDATA[fastJson 泛型反序列化]]></description><category></category></item><item><title><![CDATA[MapStruct]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/120970578</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/120970578</guid><author>LyySwx</author><pubDate>Tue, 26 Oct 2021 15:08:06 +0800</pubDate><description><![CDATA[场景再现：

   Bean 拷贝在我们的工作中非常的普遍，因为我们对实体进行了分层，常用的必入dto用来数据传输，vo是给前端在展示用的，所以我们经常会定义两层Object字段是保持一致的，便于我们 拷贝。编写这样的映射代码是一项乏味且容易出错的任务。

我们常用的是Spring的BeanUtils工具类，那么当有复杂的对象转换的时候呢比如map转bean等,List复杂对象需要深拷贝时候用Spring的BeanUtils还是要去自己封装写一些工具类，而这些工具类使用到了反射，而M...]]></description><category></category></item><item><title><![CDATA[父子线程间参数传递方案]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/120966467</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/120966467</guid><author>LyySwx</author><pubDate>Tue, 26 Oct 2021 10:08:13 +0800</pubDate><description><![CDATA[公参传递处理解决方案

全链路压测标解决方案



背景：

公参: 接口公共参数可以认为是每次调用都需要带上的

用户个人信息、地址、版本、设备、网络、链路压测标

使用到线程池

那么参数应该如何传递给呢？





首先推出三个内容，理解下其解决了什么问题



ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题（Thread类的成员变量ThreadLocal.ThreadLocalMap threadLocals）
	InheritableThreadLocal...]]></description><category></category></item><item><title><![CDATA[玩转Stream流]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/117699756</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/117699756</guid><author>LyySwx</author><pubDate>Thu, 17 Jun 2021 14:17:05 +0800</pubDate><description><![CDATA[“引言部分。Stream 作为 Java 8 的一大亮点，它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream，也不是 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合（Collection）对象功能的增强，它专注于对集合对象进行各种非常便利、高效的聚合操作（aggregateoperation），或者大批量数据操作 (bulk data operation)。Stream..]]></description><category></category></item><item><title><![CDATA[一行错误代码带来的影响:new Long[activityPageRequest.getStoreId()]]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/115898613</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/115898613</guid><author>LyySwx</author><pubDate>Tue, 20 Apr 2021 11:22:46 +0800</pubDate><description><![CDATA[问题描述

一次上线之后

从JVM上观察

YGC变频繁，从1次/5min-&gt; 3次/1min
	出现FGC


3.从性能来看左侧是问题，右侧是正常，各项指标异常，MAX能到2s，





可用率不足100%
 

背景描述：

两个需求同时上线，涉及两个接口，部署在同一应用

A. （有问题代码）

B. （正常）



排查步骤：

如何确定呢？

通过nginx切流量，来移除变量观察监控定位到是店内活动页造成的问题

通过loca...]]></description><category></category></item><item><title><![CDATA[new HashMap(list.size())指定size就能完全避免扩容带来的额外开销了吗？]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/115898389</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/115898389</guid><author>LyySwx</author><pubDate>Tue, 20 Apr 2021 11:15:22 +0800</pubDate><description><![CDATA[public static void longLongAGo() {
    int count = 1000000;

    System.out.println("---------------- 不设置hashMap初始容量 ------------");
    long start = System.currentTimeMillis();
    HashMap&lt;Integer, Object&gt; map = new HashMap&lt;&gt;();
    for (int .]]></description><category></category></item><item><title><![CDATA[Map的key，value是否可以为null？]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/111051195</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/111051195</guid><author>LyySwx</author><pubDate>Fri, 11 Dec 2020 18:24:43 +0800</pubDate><description><![CDATA[public static void main(String[] args) {
        Map&lt;String,Boolean&gt; searcher = new HashMap&lt;&gt;();
        searcher.put("one",null);
        searcher.put("two",null);
        searcher.put("three",null);
        System.out.println(MapUtils.is...]]></description><category></category></item><item><title><![CDATA[类的私有成员变量，若是多例则是线程私有，若单例则全局共享]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/110927426</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/110927426</guid><author>LyySwx</author><pubDate>Wed, 09 Dec 2020 16:20:48 +0800</pubDate><description><![CDATA[结论：类的私有成员变量，若是多例则是线程私有，若单例则全局共享，不要被私有给迷惑住了

问题背景：

    一个楼层资源是否展示是通过flag来控制的，一次请求中可以有n个楼层， 那么每个楼层开启一个线程去并行处理，理想情况下是每个线程用自己的flag部分true，部分false，结果问题是所有线程的flag值都一样，要么都true，要么都false

问题原因：

  @Service默认是单例，也就是全局唯一bean

解决方案：

  方案1. 把flag做成局部变量

  ...]]></description><category></category></item><item><title><![CDATA[String长度上限]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/110497308</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/110497308</guid><author>LyySwx</author><pubDate>Thu, 03 Dec 2020 09:45:08 +0800</pubDate><description><![CDATA[String长度上限是多少？

前言

话说Java中String是有长度限制的，听到这里很多人不禁要问，String还有长度限制？是的有，而且在JVM编译中还有规范，，而且在之前开发的中也真实地遇到过这个String长度限制的场景（将某固定文件转码成Base64的形式用字符串存储，在运行时需要的时候在转回来，当时文件比较大），那这个规范限制到底是怎么样的。

String

首先要知道String的长度限制我们就需要知道String是怎么存储字符串的，String其实是使用的一个char类型的数组来存储字]]></description><category></category></item><item><title><![CDATA[G1调优---]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/110285385</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/110285385</guid><author>LyySwx</author><pubDate>Sat, 28 Nov 2020 16:15:54 +0800</pubDate><description><![CDATA[Jvm g1调整

1.升级jdk8过程

1.使用运维工具jdk升级，（升级失败，需要重新申请机器）；

2.修改启动脚本 相关参数start.sh；

3.摘除线上流量后，更新配置重启应用；

4.恢复线上流量观察jvm;



2.Cms-api-work调优目标

Cms-api-work是为c端流量提供基础服务的，调优第一目标是低延迟，第二目标是提高吞吐量；

3.jvm启动相关配置参数解读：

OPTS_MEMORY="-server

-Xms6G ##jvm内存最大...]]></description><category></category></item><item><title><![CDATA[BigDecimal在金额计算中丢失精度问题]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/109291849</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/109291849</guid><author>LyySwx</author><pubDate>Mon, 26 Oct 2020 16:08:53 +0800</pubDate><description><![CDATA[一、问题现象：

我们在使用金额计算或者展示金额的时候经常会使用BigDecimal，这个类型也是涉及金额时非常推荐的一个类型，BigDecimal也提供了很多构造器方法，这些构造器方法使用不当可能会造成不必要的麻烦甚至是金额损失，如下图所示：



Android收银台页面也曾出现过这个bug，显示一个非常长的数字，幸好只是展示，不涉及计算和存储。

二、问题分析：

先看下BigDecimal提供的部分构造器方法


public BigDecimal(double val) {
    this(va]]></description><category></category></item><item><title><![CDATA[com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/108280966</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/108280966</guid><author>LyySwx</author><pubDate>Sat, 05 Sep 2020 16:19:34 +0800</pubDate><description><![CDATA[问题：实体类双向映射进行Json序列化时出现无限循环的异常

   背景：事情很简单，就是日志打印的时候，一条日志的打印没有任何毛病，这行代码没问题，但由于数据可变，某些情况下会报异常com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)

   影响范围：看你这条日志打在哪了，主要看try catch的作用范围，打在功能主流程中，有try catch的情况下，整个...]]></description><category></category></item><item><title><![CDATA[架构概论]]></title><link>https://blog.youkuaiyun.com/LyySwx/article/details/107797399</link><guid>https://blog.youkuaiyun.com/LyySwx/article/details/107797399</guid><author>LyySwx</author><pubDate>Sun, 09 Aug 2020 10:52:54 +0800</pubDate><description><![CDATA[顶层涉及

按需、预期未来、规划企业架构

业务全局触发，制定可落地的架构方案

技术选型，难题解决规划

方案与代码，广度与深度

技术+管理（人，资源，技术）







缓冲 Buffer

缓存 Cache

复用 Pool

分治 Sharding

亲密（粘性） sticky

权衡 Balance or trade-off



拆解分层：

  流程

 服务（偏业务）

 功能（比业务更细）





DB/Redis/Tommcat

按X轴（可用性）：

...]]></description><category></category></item></channel></rss>