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

个人头像照片

个人介绍

GitHub: https://github.com/chenhaoxiang

擅长的技术

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

    能力说明:

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

    获取记录:

云产品技术能力:

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

阿里云技能认证

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

2020年08月

  • 08.21 14:02:59
    回答了问题 2020-08-21 14:02:59

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

    大佬,单身吗?

    踩0 评论0
  • 08.20 19:44:16
    发表了文章 2020-08-20 19:44:16

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

    2.3.3 CGLIB动态代理 -《SSM深入解析与项目实战》
  • 08.19 22:31:43
    回答了问题 2020-08-19 22:31:43

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

    我是谙忆,

    这封情书 我要送给雯雯

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

    20200819222752.jpg

    情书H5链接

    踩0 评论0
  • 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深入解析与项目实战》
  • 08.06 22:53:21
    发表了文章 2020-08-06 22:53:21

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

    2.1 类加载器、 双亲委派模型 -《SSM深入解析与项目实战》
  • 08.05 22:07:57
    发表了文章 2020-08-05 22:07:57

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

    1.3 Spring MVC、Redis介绍 -《SSM深入解析与项目实战》
  • 08.05 18:21:42
    发表了文章 2020-08-05 18:21:42

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

    1.2 了解MyBatis -《SSM深入解析与项目实战》
  • 08.05 18:20:47
    发表了文章 2020-08-05 18:20:47

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

    1.1 了解Spring框架 -《SSM深入解析与项目实战》
  • 08.05 18:18:13
    发表了文章 2020-08-05 18:18:13

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

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

2020年07月

  • 07.03 18:48:44
    发表了文章 2020-07-03 18:48:44

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

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

2020年06月

  • 06.29 18:16:17
    发表了文章 2020-06-29 18:16:17

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

    com.alibaba.dubbo.rpc.RpcException: No provider available from registry stable.zk.scsite.net:2181异常解决
  • 06.05 19:16:42
    发表了文章 2020-06-05 19:16:42

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

    小猿日记(14) - 阿里云ACE是什么
  • 06.01 19:42:58
    发表了文章 2020-06-01 19:42:58

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

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

2020年05月

  • 05.30 20:05:53
    发表了文章 2020-05-30 20:05:53

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

    小猿日记(11) - 单表亿级数据分表实战
正在加载, 请稍后...
滑动查看更多
  • 发表了文章 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-08

    2.2.1 类反射 -《SSM深入解析与项目实战》

  • 发表了文章 2020-08-07

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

  • 发表了文章 2020-08-07

    [已解决] nested exception is java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache异常解决

  • 发表了文章 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-31

    小猿日记(12) - 哮喘女儿被体罚后吐血事件

  • 发表了文章 2020-05-30

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

  • 发表了文章 2020-05-28

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

正在加载, 请稍后...
滑动查看更多
  • 回答了问题 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
  • 回答了问题 2019-12-17

    “受欢迎”的编程语言等于“优秀”的编程语言吗?

    要回答这个问题。 需要先衡量出“受欢迎”和“优秀”这两个词的定义!
    就广义来说:
    受欢迎的编程语言=优秀的编程语言
    但是反过来这个=号不一定成立

    踩0 评论0
  • 回答了问题 2019-12-16

    【hi聊】2019年终回顾:程序员这些年经历最大的变化

    10年前,单纯为了考试而看技术书。现在,为了成长而看技术书。
    不点赞的都是帅哥,点赞的都是脱单的帅哥
    为什么不说女生,那还用说嘛,看到这里的都是美女
    竟然还有和程序无关不行。
    V0.0.1:书->技术书

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