谙忆个人页面-阿里云开发者社区

个人头像照片
530
40

个人介绍

GitHub: https://github.com/chenhaoxiang

擅长的技术

  • Java
  • Linux
  • 数据库
获得更多能力
通用技术能力:
  • Java
    高级

    能力说明:

    精通JVM运行机制,包括类生命、内存模型、垃圾回收及JVM常见参数;能够熟练使用Runnable接口创建线程和使用ExecutorService并发执行任务、识别潜在的死锁线程问题;能够使用Synchronized关键字和atomic包控制线程的执行顺序,使用并行Fork/Join框架;能过开发使用原始版本函数式接口的代码。

    获取记录:

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
  • 高分内容
  • 最新动态
  • 文章
  • 问答
正在加载, 请稍后...
滑动查看更多

2021年02月

  • 02.20 20:22:57
    发表了文章 2021-02-20 20:22:57

    一起重新全面认识JWT-Json Web Token

    一起重新全面认识JWT-Json Web Token

2020年12月

  • 12.29 19:06:53
    发表了文章 2020-12-29 19:06:53

    【Maven插件】CRUD非业务代码一键生成插件

    【Maven插件】CRUD非业务代码一键生成插件
  • 12.29 19:06:19
    发表了文章 2020-12-29 19:06:19

    【Maven插件】自动生成Mock测试代码

    【Maven插件】自动生成Mock测试代码

2020年08月

  • 08.20 19:44:16
    发表了文章 2020-08-20 19:44:16

    2.3.3 CGLIB动态代理 -《SSM深入解析与项目实战》

    2.3.3 CGLIB动态代理 -《SSM深入解析与项目实战》
  • 08.14 18:32:40
    发表了文章 2020-08-14 18:32:40

    2.3.2 JDK动态代理 -《SSM深入解析与项目实战》

    2.3.2 JDK动态代理 -《SSM深入解析与项目实战》
  • 08.14 18:27:04
    发表了文章 2020-08-14 18:27:04

    2.3.1 理解动态代理 -《SSM深入解析与项目实战》

    2.3.1 理解动态代理 -《SSM深入解析与项目实战》
  • 08.10 22:19:41
    发表了文章 2020-08-10 22:19:41

    2.2.2 类反射场景与使用 -《SSM深入解析与项目实战》

    2.2.2 类反射场景与使用 -《SSM深入解析与项目实战》
  • 08.07 21:55:08
    发表了文章 2020-08-07 21:55:08

    2.1.2 类加载器的工作原理与自定义加载器 -《SSM深入解析与项目实战》

    2.1.2 类加载器的工作原理与自定义加载器 -《SSM深入解析与项目实战》
正在加载, 请稍后...
滑动查看更多
  • 发表了文章 2021-02-20

    一起重新全面认识JWT-Json Web Token

  • 发表了文章 2020-12-29

    【Maven插件】CRUD非业务代码一键生成插件

  • 发表了文章 2020-12-29

    【Maven插件】自动生成Mock测试代码

  • 发表了文章 2020-08-20

    2.3.3 CGLIB动态代理 -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-14

    2.3.2 JDK动态代理 -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-14

    2.3.1 理解动态代理 -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-10

    2.2.2 类反射场景与使用 -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-07

    2.1.2 类加载器的工作原理与自定义加载器 -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-06

    2.1 类加载器、 双亲委派模型 -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-05

    1.3 Spring MVC、Redis介绍 -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-05

    1.2 了解MyBatis -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-05

    1.1 了解Spring框架 -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-05

    《SSM深入解析与项目实战》目录与说明

  • 发表了文章 2020-07-03

    每天被钉钉"浪费"的10分钟生命

  • 发表了文章 2020-06-29

    com.alibaba.dubbo.rpc.RpcException: No provider available from registry stable.zk.scsite.net:2181异常解决

  • 发表了文章 2020-06-16

    小猿日记(15) - 脚本订正注意事项

  • 发表了文章 2020-06-05

    小猿日记(14) - 阿里云ACE是什么

  • 发表了文章 2020-06-01

    小猿日记(13) - 六一儿童节快乐

  • 发表了文章 2020-05-30

    小猿日记(11) - 单表亿级数据分表实战

  • 发表了文章 2020-05-28

    小猿日记(10) - 网站发展记录

正在加载, 请稍后...
滑动查看更多
  • 回答了问题 2021-01-08

    【周末hi聊】牛年第一周,你定好今年的计划了吗?

    新年计划。少加班,别猝死

    踩0 评论0
  • 回答了问题 2020-12-31

    【周五hi聊】2020年,你的flag倒了没?

    2020年的不如人意的开局,为整年都蒙上了魔幻现实主义的色彩。坎坷相伴,有辛酸,更有感动。

    这一年,最感慨的是:我还活着,真好。 遗憾?那可太多了。年初没买口罩、比特币也忘记买了,股市,那更别说了,都是高买低卖,有没有和我合伙,反向操作我的操作,赚的钱我只要一成。

    收获嘛,和女朋友感情越来越好了,薪资也涨了,博客也有浏览量了。

    年初目标?你是在说胖10斤吗,那我没完成,不过完成了60%。 虽然挺想在今年完成目标,不过最近由于时间关系,发生了一些无可奈何的事,这应该是我今年最接近目标的一天了。

    踩1 评论0
  • 回答了问题 2020-08-21

    向阿里集团CTO鲁肃提问,开发者独家定制礼包等你赢

    大佬,单身吗?

    踩0 评论0
  • 回答了问题 2020-08-19

    【奖品:Cherry 机械键盘 粉白对装 】谁是最浪漫的程序员?

    我是谙忆,

    这封情书 我要送给雯雯

    感谢她,让我知道世上有比棉花糖还甜的存在 夕阳也会微笑,下雨天都有着芬芳
    世间的美好,印在你心,种在我身

    20200819222752.jpg

    情书H5链接

    踩0 评论1
  • 回答了问题 2020-05-15

    servlet释放资源的方法是?【每日挑战】5.15

    D

    踩0 评论0
  • 回答了问题 2020-04-23

    泰山版《Java开发手册》孤尽大佬出题 - 据说阿里P7正确率只有50%

    1-10 答案分别是:A B B C D D A C D A

    踩0 评论1
  • 回答了问题 2020-04-16

    【每日挑战】下列那个关键字通常用来为对象加锁,从而使得对对象的访问是排他的?

    c

    踩0 评论0
  • 提交了问题 2020-04-07

    【精品问答】带你进入数据库领域

  • 回答了问题 2020-02-12

    疫情下的2.14情人节:“小城大爱”故事征集

    房租免到你来。来了负责安排。 中国好房东!遇到好房东,不容易啊。

    image.png

    image.png

    踩0 评论0
  • 回答了问题 2020-01-29

    居家隔离+一起学习!21天打卡养成习惯,坚持就拿“大礼包”!

    1月29日打卡第一天,今日学习:让String拥有变化之力 | 带你学《Java语言高级特性》之十六

    踩0 评论7
  • 回答了问题 2020-01-15

    【hi聊】2020新年展望:get程序员过年的正确姿势

    过年回家:
    “女朋友怎么样了?“
    ”老妈,别问这个了“
    ”那我们来下盘象棋吧“
    巴拉拉~摆棋
    巴拉拉~下棋
    ”老妈,你干嘛老是追着我的象吃“
    沉默
    “老妈,你把我对象吃完也没用啊,马上我就将军了”
    “将军”
    “将军有什么用,你对象呢?你对象呢?”
    。。。

    踩0 评论0
  • 回答了问题 2020-01-09

    java数据结构中 map跟tuple2

    Java 的 Tuple 元组数据类型 元组类型,即 Tuple 常在脚本语言中出现,例如 Scala 的 ("Unmi", "china@qq.com", "blahbla")。元组可认为是象数组一样的容器,它的目的是让你方便构造和引用,例如 Pair 可认为是一个只能存两个元素的元组,像是个 Map; 真正的元组应该是可以任意多个元素的容器,绕来绕去,它还是数组,或列表,所以我们实现上还是要借助于数组或是列表。

    先看 Scala 中什么是元组:

    val tuple = ("Unmi", "fantasia@sina.com", "blahblah...") println(tuple._1) //输出 Unmi Scala 中访问从 1 开始,用 ._1 方式来访问其中的元素。

    场景:当在一个方法中, 你需要返回几个对象,这几个对象的类型一致,你可以返回一个数组;如果几个对象的类型不同呢,当然你可以返回一个Object[]数组,可是这样在使用结果数组的时候,就需要强转对象的类型,会导致类型不安全;也可以定义一个dto,当多个场景下需要使用的不同,需要定义多个dto,这样会类爆炸,而且重用率极低;在非常接近Java语言的Scala里有元组的定义:val t = (1, 3.14, "Fred"),就是一个不同类型的数据放到一个线性集合里,在Java里我们可以模拟出一个类似的结构,以适合上面的场景。

    踩0 评论0
  • 回答了问题 2020-01-10

    如何使用 Serverless Framework?

    AWS / Azure 中国区的 AWS Lambda / Azure Functions 服务都是可以用的。

    国内云厂商的话也支持阿里云和腾讯云。

    相关云厂商的使用手册戳:https://github.com/serverless/serverless/tree/master/docs/providers

    踩0 评论0
  • 回答了问题 2020-01-09

    java中的接口跟抽象类

    1.语法层面上的区别

      1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

      2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

      3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

      4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    2.设计层面上的区别

      1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

      2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

    踩0 评论0
  • 回答了问题 2020-01-09

    寻找2020年第一批技术出题官

    666

    踩1 评论0
  • 回答了问题 2020-01-09

    如何设计存储海量数据的存储系统?

    https://www.infoq.cn/article/7cBOXVbB6B5V0BJh6Rfx

    踩0 评论0
  • 回答了问题 2020-01-09

    了解过JVM调优没,基本思路是什么?

    1.监控GC的状态

    使用各种JVM工具,查看当前日志,分析当前JVM参数设置,并且分析当前堆内存快照和gc日志,根据实际的各区域内存划分和GC执行时间,觉得是否进行优化。

    举一个例子: 系统崩溃前的一些现象:

    每次垃圾回收的时间越来越长,由之前的10ms延长到50ms左右,FullGC的时间也有之前的0.5s延长到4、5s FullGC的次数越来越多,最频繁时隔不到1分钟就进行一次FullGC 年老代的内存越来越大并且每次FullGC后年老代没有内存被释放 之后系统会无法响应新的请求,逐渐到达OutOfMemoryError的临界值,这个时候就需要分析JVM内存快照dump。

    2.生成堆的dump文件

    通过JMX的MBean生成当前的Heap信息,大小为一个3G(整个堆的大小)的hprof文件,如果没有启动JMX可以通过Java的jmap命令来生成该文件。

    3.分析dump文件

    打开这个3G的堆信息文件,显然一般的Window系统没有这么大的内存,必须借助高配置的Linux,几种工具打开该文件:

    Visual VM IBM HeapAnalyzer JDK 自带的Hprof工具 Mat(Eclipse专门的静态内存分析工具)推荐使用 备注:文件太大,建议使用Eclipse专门的静态内存分析工具Mat打开分析。

    4.分析结果,判断是否需要优化

    如果各项参数设置合理,系统没有超时日志出现,GC频率不高,GC耗时不高,那么没有必要进行GC优化,如果GC时间超过1-3秒,或者频繁GC,则必须优化。

    注:如果满足下面的指标,则一般不需要进行GC:

    Minor GC执行时间不到50ms; Minor GC执行不频繁,约10秒一次; Full GC执行时间不到1s; Full GC执行频率不算频繁,不低于10分钟1次; 5.调整GC类型和内存分配

    如果内存分配过大或过小,或者采用的GC收集器比较慢,则应该优先调整这些参数,并且先找1台或几台机器进行beta,然后比较优化过的机器和没有优化的机器的性能对比,并有针对性的做出最后选择。

    6.不断的分析和调整

    通过不断的试验和试错,分析并找到最合适的参数,如果找到了最合适的参数,则将这些参数应用到所有服务器。

    踩0 评论0
  • 回答了问题 2020-01-09

    以下查询语句有没有性能问题?

    踩0 评论0
  • 回答了问题 2020-01-09

    TCP连接如何保证安全可靠的?

    简介 TCP提供一种面向连接的、可靠的字节流服务。

    面向连接:两个使用TCP的应用(通常是一个客户端和一个服务器)在彼此交换数据之前就需要建立连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。 可靠

    应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。 (将数据截断为合理的长度) 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。(超时重发) 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 。 (对于收到的请求,给出确认响应)(之所以推迟,可能是要对包做完整校验) TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。 (校验出包有错,丢弃报文段,不给出响应,TCP发送数据端,超时时会重发数据) 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。 (对失序数据进行重新排序,然后才交给应用层) 既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。(对于重复数据,能够丢弃重复数据) TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。(TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)TCP使用的流量控制协议是可变大小的滑动窗口协议。 可靠性总结:

    数据截断为数据报的长度 计时重传 推迟验证 重新排序 舍弃重复数据 流量控制

    踩0 评论0
  • 回答了问题 2020-01-09

    为什么TCP连接需要三次握手,两次不可以吗,为什么?

     两次握手只能保证单向连接是畅通的。 Step1       A -> B : 你好,B。

    Step2       A <- B : 收到。你好,A。

    这样的两次握手过程, A 向 B 打招呼得到了回应,即 A 向 B 发送数据,B 是可以收到的。

    但是 B 向 A 打招呼,A 还没有回应,B 没有收到 A 的反馈,无法确保 A 可以收到 B 发送的数据。

    只有经过第三次握手,才能确保双向都可以接收到对方的发送的 数据。 Step3       A -> B : 收到,B。

    这样 B 才能确定 A 也可以收到 B 发送给 A 的数据。

    踩0 评论0
正在加载, 请稍后...
滑动查看更多