next

java的AQS中enp没有同步代码块为啥是原子操作

喜夏-厌秋 提交于 2020-10-07 06:14:00
先看一看enq()的代码 private Node enq( final Node node) { for (;;) { Node t = tail; if (t == null ) { // Must initialize if (compareAndSetHead( new Node())) tail = head; } else { node.prev = t; if (compareAndSetTail(t, node)) { t.next = node; return t; } } } } 看到这段代码稍微有点疑惑: node.prev = t; if (compareAndSetTail(t, node)) { t.next = node; return t; } 为啥是原子操作? compareAndSetTail(pred, node)是CAS原子操作我理解,那为啥if后面的语句也是原子的呢?pred.next会不会指向错误的节点? 然后画了一下图就理解了,自己还是太菜了,这种简单的逻辑还思考了一段时间 来源: oschina 链接: https://my.oschina.net/u/4392850/blog/4283908

性能测试之Jmeter中场景设置与启动方式

坚强是说给别人听的谎言 提交于 2020-10-07 05:19:28
Jmeter场景设置与启动方式 性能测试场景是用来模拟模拟真实用户操作的工作单元,所以场景设计一定要切合用户的操作逻辑,jmeter主要是通过线程组配合其他组件来一起完成场景的设置。 线程组设置 Jmeter线程组实际上是简历一个线程池,然后根据用户的设置完成线程池的初始化,在运行时做各种逻辑处理 上图是一个线程组的配置界面,下面我们对具体的参数进行说明 name和comments 是名称和注释的配置,这里根据自己要测试的场景设置就好,最好是见名知意 Action to be taken after a sampler error 在取样器错误后要执行的操作,也就是说在某一个请求出错后的异常处理方式,有5中方式 Continue, 继续,取样器模拟的请求出错后,继续运行 在大量用户并发请求时,服务器可能会出现错误响应,这属于正常现象,此时要把错误记录下来,继续后面的请求 start next Thread Loop 如果出错,则统一脚本中的剩下的请求将不在执行,直接重新开始,比如有个场景,需要先登录后发文,这个时候如果登录失败了,那么发帖就不会成功,所以没必要继续执行,直接开始下一轮测试就好,此时就可以设置这个错误处理方式。 stop thread 停止线程,如果遇到取样器模拟的某个请求失败,则停止当前线程,不再执行,比如配置了40个线程,某个线程的请求失败,则停止当前线程

自动化运维-记自动添加客户负责人的工作开发

孤者浪人 提交于 2020-10-07 04:42:15
公司自动开始用钉钉后,企业的相关信息化软件开始使用钉钉上的应用程序。与销售公司相关的就是CRM系统。 CRM系统中客户是私人的,如果想多个人同时负责,需要添加客户负责人。由于公司的特殊性质,客户特别多,经常会有人要求增加客户负责人。每天都有几个小时在做这样的工作。钉钉消息、添加负责人,太繁琐了。 学以致用,开发个工具自动化处理任务。 闲话少说,开干。 设计思路 确认CRM是否有自动添加客户负责人的接口 确认钉钉的审批接口是否可以使用 确认接口数据都能拿到后,后台写个服务即可。 CRM 系统分配用户 1 、采集客户信息 分配客户负责人是通过客户的dataid来处理的,首先需要采集客户信息。幸好以前有定时服务采集客户信息。跳过 2 、分配客户负责人接口 客户负责人分配才是这次的自动化处理的关键,通过查看CRM的API接口。可以实现,按照下面的代码执行即可。 public static void ReqDistributionCustomer( string datatids, string distributionUserIds, string userid, string corpid, string token, Action< string > SuccessCallback = null , Action< string > FailCallback = null ) {

手把手教你做一张马赛克高清图(值得收藏,可以用来哄女朋友开心)

孤者浪人 提交于 2020-10-07 04:30:51
文章目录 前言 一、准备阶段 二、软件使用 三、成图展示 四、总结 前言 无意中发现了一个有趣的软件,然后当时用了这个软件,还有电脑录屏软件和视频剪辑软件给女朋友做了一个短视频,直接感动哭。下面我们来看一下制作过程和成图吧。 一、准备阶段 1.下载软件 我上传到了我的百度网盘大家可以自行下载 链接:https://pan.baidu.com/s/19WXiHI5t1AQLyd8VWeJXog 提取码:c5b7 2.软件安装 安装很简单,根据提示点next即可,之前我用的是英文版软件,这回给大家找了一个中文版。 二、软件使用 这是软件的主要功能板块。下面详细演示制作过程 1.导入图片库 2.添加文件夹 添加图像库之后会出现红圈中的内容,这说明添加成功了,然后选择保存列表 将待制作的图片拖入,然后会显示预览效果,接下来点击回车即可 制作中 三、成图展示 四、总结 因为上传网页会压缩,所以不是很清楚,原图比这清楚好多的。 王者荣耀的图片库是网站爬取的。大家可以参考一下这个文章写的特别棒而且还很实用 https://blog.csdn.net/weixin_41635750/article/details/108500121 大家要是觉得不错的话就点个赞关注一下吧。 来源: oschina 链接: https://my.oschina.net/u/4321806/blog/4655180

CentOS7.x安装cobbler无人值守安装系统

微笑、不失礼 提交于 2020-10-07 03:59:28
CentOS7.x cobbler无人值守安装 cobbler介绍 自打若干年前 Red Hat,推出了 Kickstart,不再需要刻了光盘一台一台地安装 Linux,只要搞定 PXE、DHCP、TFTP,还有的 Kickstart 脚本,就能瞬间安装上百台服务器。 Red Hat 最新(Cobbler项目最初在2008年左右发布)发布了网络安装服务器套件 Cobbler(补鞋匠)。 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等。 Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。 Cobbler是较早前的kickstart的升级版,优点是比较容易配置,还自带web界面比较易于管理。 Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成,如Puppet,暂时不支持SaltStack。 cobbler集成的服务 l PXE服务支持:预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘

【bzoj3522】[Poi2014]Hotel 树形dp

女生的网名这么多〃 提交于 2020-10-06 07:04:49
题目描述 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达。吉丽要给他的三个妹子各开(一个)房(间)。三个妹子住的房间要互不相同(否则要打起来了),为了让吉丽满意,你需要让三个房间两两距离相同。 有多少种方案能让吉丽满意? 输入 第一行一个数n。 接下来n-1行,每行两个数x,y,表示x和y之间有一条边相连。 输出 让吉丽满意的方案数。 样例输入 7 1 2 5 7 2 5 2 3 5 6 4 5 样例输出 5 题解 树形dp 如果树上三个点之间两两距离相同,那么距离一定为偶数,且这三条路径的中点重合。 那么我们可以枚举这个中点,要求的就是选出三个点到这个中点距离相同的方案数。 设f1[i]表示选出1个深度为i的点的方案数,f2[i]表示选出2个深度为i的点的方案数,f3[i]表示选出3个深度为i的点的方案数。 然后树形dp乱搞就行了。 注意清空数组不能使用memset,必须要动态清空。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 5010 typedef long long ll; int n , head[N] , to[N << 1] , next[N << 1] , cnt , deep[N] ,

阅读java.util.concurrent.SynchronousQueue源码Note

天涯浪子 提交于 2020-10-06 06:16:02
java.util.concurrent.SynchronousQueue 同步队列,主要用去生产与消费! 采用CAS方式来实现并发控制, sun.misc.Unsafe 基于公平性做了两种实现,一公平策略,使用队列实现;二非公平策略,使用栈实现。 常用操作 操作 put 一直阻塞,直至数据被消费 offer 分为两种,一种不阻塞,尝试阿静数据放入队列,无空间时,则直接返回false;一种指定阻塞时间,超时后仍无空间,返回false,否则返回true take 一直阻塞,直至获取到数据 poll 分为两种,一种不阻塞,尝试从队列中获取数据,未获取到返回null;另一种指定阻塞时间,超时后仍未获取到数据,返回null 底层实现 两种策略的实现,底层均是使用了 java.util.concurrent.SynchronousQueue.Transferer , 此抽象类定义了如何放入数据和从队列中取数据,相当于是传输数据,方法名称也很贴切: transfer . 1.1 首先来看非公平策略的实现,此策略使用栈实现, java.util.concurrent.SynchronousQueue.TransferStack ,栈中定义了栈顶节点head,类型为 java.util.concurrent.SynchronousQueue.TransferStack.SNode , 1.2

Tomcat源码分析(2)-连接器Connector整体架构

泄露秘密 提交于 2020-10-06 03:09:18
在 上一篇 博文中,主要分析了tomcat的整体架构,通过上一篇的分析可以知道,tomcat主要有两部分组成,分别为连接器(Connector)和容器(Container)。本文介绍连接器(Connector)。 一、Connector的主要功能 连接器主要用于对外交流,它负责接收外部的请求,然后把请求转交给container进行处理。主要功能如下: 监听网络请求、接受字节流 根据应用层协议(HTTP or AJP)把接受到字节流转换成TomcatRequest 把TomcatReqeust转换成ServletRequest 调用容器Servlet,得到ServletResponse 把ServletRespone转换成TomcatResponse 把TomcatResponse转化成字节流,返回给浏览器 基于以上详细分析可知Connector的主要功能可以抽象为三点 网络监听 协议解析处理 协议屏蔽转换(tomcatRequest到servletReqeust转换,servletResponse到tomcatResponse的转换) 二、Connetor内部的组件 基于上述的分析,接下来具体看tomcat connector的代码组件,主要有三个 Endpoint-用于网络监听 Processor-用于协议解析处理 Adapter-用于转换

纸张变键盘:不怕水、不怕折,还能自供电

烈酒焚心 提交于 2020-10-05 18:17:45
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 你的下一个蓝牙键盘可能就是一张纸。 它不怕进水,也不怕折叠。最关键的是它不需要装电池,每次敲击产生的能力足以提供BLE蓝牙连接。 手指在纸面滑动即可调节音量。 点击一下,轻松切换下一首歌,或者静音。 简直就像MacBook的TouchBar一样。 你也不必怕咖啡撒到纸上,导致键盘报废。它比一般键盘防水效果好得多。 将液体滴在这张“键盘”上,只需纸巾轻轻一擦,表面恢复如新,仍能正常使用。 这么厉害的键盘,却不必安装电池,因为你 手指的每次敲击都会为键盘供电 。 发明这个键盘的Ramses Martinez教授说,键盘利用了垂直压力传感器,不需要任何外部电池,因为它们从与用户接触中获取能量。 你唯一需要担心的是,键盘放在桌上会不会被妈妈当做废纸扔掉。 这个纸质键盘是来自 普渡大学 的最新研究成果,它有个专业的名字:自供电纸质电子器件(RF-SPE)。 它的制造方法大规模打印纸张的过程兼容,可以轻松地将常规纸张快速转换为智能纸张。 研究人员在其表面依次喷涂上烷基化有机硅烷、导电纳米颗粒、聚四氟乙烯、乙基纤维素,让它具体了防水、防油和除尘的能力。

Hexo的那些事儿

霸气de小男生 提交于 2020-10-05 16:36:03
本文记录作者在使用 Hexo 写博客的过程中遇到的种种问题,做成 Hexo 的那些事儿集合,不定时更新 配置问题 先将常用的配置项总结一下 重要的配置文件有两个_config.yml,一个是主题配置文件,一个是系统配置文件。分别在根目录和 themes 目录下 系统配置文件: title: 主题设置 subtitle: 小标题设置 author: 作者信息设置 language: 语言设置 主题配置文件: favicon: 图标设置 footer: 页脚设置 menu: 菜单设置 scheme: 主题设置 sidebar: 侧边栏设置 auto_excerpt: 预览设置 baidu_analytics: 百度收录 这基本上就是常用的一些设置了。 怎么修改模版主题内部的信息? 例如:标题,页脚信息,图标,语言等 我们首先要去查看对应主题的官方文档,文档一般都会有详细的介绍。 怎么让文章只显示预览,不全文显示? 两种方法: 主题设置文件_config.yml 中 auto_excerpt 将其使能即可 使用<!–more–>作为文章分隔即可 这两种方法在使用效果上是有不同的… 第一种方法,会把所有的文本集中,不考虑内部换行结构等,全部作为预览显示。 第二种方法较好,会保留当前文本的内部结构,看起来更加整洁,并且预览内容可控制。 移动端怎么显示侧边栏? 在 sidebar 配置项下