Atom

Java并发机制的底层实现原理之volatile应用,初学者误看!

一世执手 提交于 2020-04-18 00:21:53
  volatile的介绍:   Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。本章我们将深入底层一起探索下Java并发机制的底层实现原理。  在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。本文将深入分析在硬件层面上Intel处理器是如何实现volatile的,通过深入分析帮助我们正确地使用volatile变量。我们先从了解volatile的定义开始。 1.volatile的定义与实现原理   Java语言规范第3版中对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。如果一个字段被声明成volatile

Vue进阶(幺零九):npm install 遇到的-4048错误的解决办法

Deadly 提交于 2020-04-15 10:40:15
【推荐阅读】微服务还能火多久?>>> 项目环境: vue+weback,操作系统: win7 64位 在安装vue项目npm依赖包过程中,居然破天荒的遇到了4048错误,具体错误截图如下图所示: 解决方法 进入项目目录,把node_modules文件夹删除,package-lock.json文件也删除; 以管理员身份运行CMD; cd到项目目录,先清除npm缓存: npm cache clean --force 再进行 npm install 点赞 1 收藏 分享 文章举报 No Silver Bullet 博客专家 发布了656 篇原创文章 · 获赞 2690 · 访问量 2479万+ 他的留言板 关注 来源: oschina 链接: https://my.oschina.net/u/4350255/blog/3235182

Educational Codeforces Round 85 (Rated for Div. 2) D. Minimum Euler Cycle(字典序最小的欧拉回路)

梦想与她 提交于 2020-04-14 14:26:09
【推荐阅读】微服务还能火多久?>>> 目录 传送门 题意: 思路: 代码: 传送门 题意: 思路: 构造的欧拉回路是 1 2 1 3 1 4 1 5……1 n 2 3 2 4 2 5……2 n 3 4 3 5……3 n …… n-1 n 1 一共n*(n-1)+1个数 二分取[L,R]的数即可 代码: # include <iostream> # include <stdio.h> # include <algorithm> # include <string.h> # include <vector> # include <math.h> # include <map> # include <queue> # include <set> # include <stack> # define pb push_back # define lb lower_bound # define ub upper_bound # define fi first # define se second # define all(x) (x).begin(),(x).end() # define SZ(x) ((int)(x).size()) # define debug(x) cout<<x<<endl # define rep(i,a,b) for(int i=a;i<=b;i++) #

安卓图形验证码---防止暴力尝试对软件的冲击

ぃ、小莉子 提交于 2020-04-14 14:23:42
【推荐阅读】微服务还能火多久?>>> 如图所示:图形验证码防止被大量注册刷爆。 //主体代码 public class VerificationCode { private static final char[] CHARS = { '0','1','2','3','4','5','6','7','8','9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', }; private static VerificationCode mCodeUtil; private int paddingLeft,paddingTop; private StringBuilder stringBuilder=new StringBuilder(); private Random random=new Random(); private static final int DEFAULT_CODE_LENGTH=4;//验证码长度 private static final int DEFAULT_FONT_SIZE =60;//验证码字体大小 private static final int

密码技术整理

僤鯓⒐⒋嵵緔 提交于 2020-04-14 09:51:11
【今日推荐】:为什么一到面试就懵逼!>>> 基本概念 密码学分为 密码编码学 和 密码分析学 密码编码学目的是寻求保证信息的 保密性、完整性、真实性和不可否认性 密码分析学目的是研究加密信息的破译和信息伪造的方法 现代密码系统分为两类: 对称密码系统 和 非对称(公钥)密码系统 对称密码系统加密和解密使用同一个密钥。常见算法有DES、AES、RC4等 非对称密码系统加密和解密密钥不同。 常见算法有RSA、椭圆曲线算法 对称密码 古典密码 (1). 单表替代密码:将英文字母向后推移k位 (2). 多表替代密码 (3). 置换密码:将明文中的字母重新排列,字母本身不变 分组密码 (1) DES算法 (2) AES算法 序列密码 (1) RC4 公钥密码 RSA算法 基于大树分解问题 ELGamal算法 椭圆曲线算法 To be continued 点赞 收藏 分享 文章举报 minose 发布了124 篇原创文章 · 获赞 32 · 访问量 7万+ 私信 关注 来源: oschina 链接: https://my.oschina.net/u/4312062/blog/3234050

选择工业PLC远程模块需要注意功能细节

自作多情 提交于 2020-04-12 09:18:37
4G工业PLC远程模块已经广泛应用于电力、工业自动化、环保、金融等工业领域。 自助终端设备需要大数据量网络传输,通过4G模块高速联网,将所有终端业务数据及设备运行状态实时传输到业务中心,降低了业务中心运营成本,管理运营规模化。 1.边缘计算功能 支持远程控制功能,实现数据采集、数据监控、数据过滤、数据安全防护,数据存储,数据上传、远程上下载等功能; 2.多种联网方式 支持以太网、4G、WiFi,手机热点等联网方式,为不同的应用场合提供不同的接入方案。 3.协议兼容广 支持工业现场的多种工业设备协议、国际标准协议,如:Modbus等,使设备轻松接入。 4.故障自愈 支持联网断线自动重拨,故障自愈;提供故障线路链路冗余,多级链路检测机制保障设备在线。 5.安全防护 支持防火墙功能,保证设备网络安全特性; 6.云组态 一站式完成终端设备数据采集、实时控制、分组管理、组态设计等功能。 7.智能维护 对每台机床进行远程维护,实现远程诊断、远程遥控。对现场设备自动更新下载程序,运维人员无需去现场就能及时解决故障问题。 点赞 收藏 分享 文章举报 华杰智控HJ8900 发布了26 篇原创文章 · 获赞 6 · 访问量 1万+ 私信 关注 来源: oschina 链接: https://my.oschina.net/u/4404541/blog/3230533

Codeforces 1333 F. Kate and imperfection

守給你的承諾、 提交于 2020-04-11 17:37:38
题意: 在集合 S = 1 , 2 , ⋯ , n S={1,2,⋯,n} S = 1 , 2 , ⋯ , n 中,对于每个正整数 k k k ,找出一个大小为 k k k 的子集,使得该子集中两两间最大公因数的最大值最小,求这个最小值。 我们考虑如何构造两两间最大公因数的最大值最小的集合,首先肯定是把所有质数先丢进集合里,然后再把与已经在集合内的数的最大公因数 = 2 =2 = 2 的数丢进去,然后是 = 3 =3 = 3 的数……然后注意到,如果我们加入了一个合数,那么他的所有因子必定已经在集合内了,于是加入的这个数字能够产生的最大公因数就是他的最大因子,因此用埃筛维护这个贪心的过程,排序一遍输出即可。 AC代码: int n , m ; int main ( ) { sd ( n ) ; vector < int > ans ( n + 1 , 1 ) ; //ans包含n+1个值为1的元素。 rep ( i , 2 , n ) { for ( int j = 2 * i ; j <= n ; j + = i ) { ans [ j ] = i ; } } sort ( ans . begin ( ) , ans . end ( ) ) ; rep ( i , 2 , n ) printf ( "%d%c" , ans [ i ] , i == n ? '\n' : ' '

基础面试题:面向对象和面向过程的区别,性能对比

▼魔方 西西 提交于 2020-04-10 15:38:25
概念: 面向过程 :分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象 :把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 性能对比: 面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能比面向过程低。 面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。 点赞 1 收藏 分享 文章举报 fking86 发布了121 篇原创文章 · 获赞 11 · 访问量 41万+ 他的留言板 关注 来源: oschina 链接: https://my.oschina.net/u/4298434/blog/3227906

4-8.goto语句与深层循环

穿精又带淫゛_ 提交于 2020-04-10 14:55:11
goto语句作用 跳出深层循环(嵌套的循环) 实现循环(与汇编的实现方式类似) 跳出深层循环实现 # include <iostream> using namespace std ; int main ( int argc , char * argv [ ] ) { //为了理解goto语句,我们解决下面一个问题为例 /* 一个数列: 1 2 3 4 5 6 7 8 9 10 11 12 如果只想输出1,2,5,6,9,10, */ /*************************双层循环*************************/ int intArray [ 3 ] [ 4 ] = { { 1 , 2 , 3 , 4 } , { 5 , 6 , 7 , 8 } , { 9 , 10 , 11 , 12 } } ; //计算二维数组的行、列的方法 int colSize = sizeof ( intArray [ 0 ] ) / sizeof ( int ) ; int rowSize = sizeof ( intArray ) / sizeof ( int ) / colSize ; cout << "行:" << colSize << endl ; cout << "列:" << rowSize << endl ; //对第一层进行循环 for ( int i =

海思3516D闪屏问题-修复

眉间皱痕 提交于 2020-04-10 14:53:54
海思3516D闪屏问题-修复 结论: 闪屏原因: 以前使用错误: 相机还存在问题: 结论: 闪屏问题的根本原因是海思AE处理的有问题,而我们现场的问题尤为复杂,修改了以下几个地方: 1 去掉了抗闪功能,抗闪功能和WDR一同使用会有闪屏问题。 2 增加数字增益调节,sensor增益调节有again和dgain,代码中只有again的调节,没有dgain,经验证dgain也会或多或少影响闪烁。 3 调整感兴趣区域权重值。 4 目标亮度值从65改到128 调整了这4个地方后,闪屏问题得到解决。如果还有问题,还可以继续优化。 闪屏原因: 1 抗闪+WRD,同时使用很容易出现闪屏。抗闪功能一般室内使用,过滤灯光产生的波纹形闪烁。而我们设备抗闪一直处于打开状态。 2 AE的增益和曝光时间配置不对,我核对了imx290的芯片手册和海思的290demo,配置方式应该没有问题,只是数字增益写死是0了。这个也可能导致某些轻微的闪烁。 3 感兴趣区域权重值,此值过高,会使曝光策略为高光优先的模式,为了防止过曝,适当降低亮度值,而当AE算法发现画面亮度比目标亮度小了,又会增加亮度值,这一增一减,也会造成闪烁。 4 自动曝光调整速度,u8Speed,某些sensor在wdr模式下,此值>64也可能导致画面闪烁。 5 曝光时间和sensor增益不满足线性关系,比如曝光量为4096,可以分配曝光时间2