石福鹏

个人博客

置顶 多线程与高并发(一)

多线程-基本概念 1、基本概念 程序: wechat.exe 进程: wechat.exe启动后,叫做一个进程,是相对于程序来说的,是个动态的概念 线程: 作为一个进程里面最小的执行单元就叫一个线程,或者说,一个程序里不同的执行路径就叫做一个线程 1234567891011121314151617181920212223242526272829303132333435363738394041......

置顶 Java 基础查漏补缺【多线程机制篇】

概念 线程: 是一个程序内部的顺序控制流。通俗的来说,是一个程序里面不同的执行路径 (记住这句话就可以了) 程序: wechat.exe 进程: wechat.exe启动后,叫做一个进程,是相对于程序来说的,是个动态的概念 线程: 作为一个进程里面最小的执行单元就叫一个线程,或者说,一个程序里不同的执行路径就叫做一个线程 平时所讲的进程开始执行了,是指进程中的主线程(main方法)开始执......

生成的sign出现偶发性的签名验证失败问题排查

最近做了一个微信企业付款,即微信企业账户给用户下发红包的功能,从测试开始就出现偶发性的报SIGN_ERROR签名错误,因为自己的项目比较多,就让同时帮忙debug排查了,排查的结果就是没问题,红包发放正常。 但是一上测试,就会偶发; 发现问题 无奈之下,我就把每次请求的request、response都打印出来了,通过微信支付接口签名校验工具测试了下,发现sign并不一致 发现一个问题,后......

macOS Catalina下安装nvm、node及每次需要重载配置文件问题解决

在使用hexo写博客的时候,经常需要执行一些命令,但是发现每次打开终端,输入命令就提示command not found,找到问题后记录下这个问题,以及在最新的Catalina系统下安装nvm

每次需要重载配置文件的问题解决 先说几个概念,做前端开发的伙伴肯定都知道,但是做后端的,虽然偶然能用到,但是基本上都是按照网上的教程,并不清楚nvm、npm、nodejs三者的区别 nvm:是nodejs的版本管理工具 也就是说一个nvm可以管理很多node版本和npm版本 nodejs:项目开发时所需要的代码库 npm:nodejs包管理工具 在安装nodejs的时候,npm也会跟着一起......

Hexo博客搭建-博客上传后访问页面返回404问题排查

前言 给自己的Mac重新做了系统之后,按照正常的流程,安装nvm(安装的最新的版本),安装node,然后安装hexo,一切都很顺利的进行,然后在之前已经备份好的博客源文件的根目录执行hexo g、hexo d,然后去访问博客发现404了 问题发现 查看了下_config.yml配置文件,没啥问题,这些应该没啥问题,因为源码都是之前一直用鱼发布博客用的,没做过什么修改,所以肯定没问题了,就上......

【每日一题】如何解决ABA问题?为什么能解决?解决思路是什么?

问题分析 aba问题出现在cas机制的操作中,cas 比较并更新,比如说cas(期望的值,更新的值),如果发现变量是期望的值,那么就将该值替换为更新的值。 这里面存在的问题就在于,如果期望的值中途被人改掉了,但是后面又被改了回来, cas机制不能发现这个过程,也是发现期望值其实中间发生过变动。 解决方式 给数据加上版本号或者时间戳,比较期望值的时候 比较的是值和版本号或者时间戳,即使值相同,......

【每日一题】Java 多线程中notify和notifyall的区别是?

notify notify唤醒在此对象监视器上等待的单个线程。 如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。 直到当前线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争; 例如,唤醒的线程在作为锁定此对象的下一个线......

macOS Catalina 已损坏无法打开解决办法

App 在macOS Catalina下提示已损坏无法打开解决办法: 打开终端; 输入以下命令,回车; 1sudo xattr -d com.apple.quarantine /Applications/xxxx.app 注意:/Applications/xxxx.app 换成你的App路径(推荐直接将.app文件拖入终端中自动生成路径,以防空格等转义字符手动复制或输入出现错误) ......

【每日一题】形成数据库死锁的原因有哪些?如何能避免死锁

1、什么是死锁 会话A持有一行数据的锁,会话B持有另一行数据的锁。 A申请获取B持有的那个锁,但是被B占用着,所以A等待。 B申请获取A持有的那个锁,但是被A占用着,所以B等待。 2、死锁的本质 两个或多个会话/线程,本身拥有一个锁,但是去互相申请对方拥有的锁,导致都在锁等待,即为死锁。索引失效会造成表锁,比死锁更严重 3、举例 在RR隔离级别下,数据库有两条数据id=1和id=10。 且i......

【每日一题】聊一聊线上oom的排查方案?

oom,先说排查思路,oom是内存溢出,则有 堆内存区域溢出 方法区或者元数据区溢出 非堆空间(DirectMemory)溢出 三种场景的情况。 首先通过溢出的异常报错,先确认是哪种类型。 如果确认是堆内存区域溢出,可能原因是内存泄露 或者堆空间回收的速度赶不上对象创建的速度,排查方案就是看gc日志,如果是gc频率很高 但是回收对象却很少 就要怀疑是内存泄露,这个时候看dump日志 找......