- 博客(528)
- 资源 (13)
- 问答 (4)
- 收藏
- 关注
原创 java 原子类累加器
前言LongAccumulatorDoubleAccumulator在多线程进程情况,我们可能希望计算某一共享变量,如页面访问次数,商品剩余数量秒杀。本文仅用LongAccumulator做说明。LongAccumulator
2020-11-15 21:54:39 855
原创 WIN32 基础控件的使用
代码模板int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow){ //弹出弹窗 DialogBoxA(hInstance, MAKEINTRESOURCEA(IDD_DIALOG1), NULL, Dlgproc); return 0;}复选框代码寓意:我们点击显示之后会弹
2020-11-14 00:00:36 651
原创 WIN32 非模态对话框
//创建一个对话窗口实例 HWND dialogHwnd=CreateDialogA(hInstance, MAKEINTRESOURCEA(IDD_DIALOG1), hwnd, mydialog); //显示 ShowWindow(dialogHwnd, SW_SHOWNORMAL); //不会阻塞代码继续运行非模态对话框关闭和模态对话框关闭有所区别INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, L.
2020-11-12 22:46:22 536
原创 WIN32 控件基础
首先我们看下如下界面:上面有一个弹窗,有两个控件,每个控件他们都是一个Window实例。我们首先看下点击事件的交互代码://这是控件所在弹窗的事件过程函数INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) { //窗口关闭 if (WM_CLOSE==msgType) { EndDialog(hwnd, 0); return TRUE; } //WM_COMMAND
2020-11-11 23:58:34 1114
原创 WIN32 窗口以及模态弹窗创建显示
在常规界面开发中当我们设计好一个窗口类时,就要创建一个窗口实例进行显示。窗口实例分为很多种,弹出窗口,嵌套子窗口等。 //1.窗口类设计 WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = MYWNDPROC; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; wc.hCursor = NULL;
2020-11-11 16:21:27 1385
原创 WIN32 弹窗和父窗口交互
当弹出子窗口时,弹窗自动禁止父窗口的鼠标键盘交互。子窗口弹出时会做出如下几个事情:内部开启自己过程函数 监听事件循环禁止父窗口的键盘鼠标交互如果想要用户可以直接和弹出窗口的父窗口交互。可以调用EnableWindow启用即可。EnableWindow(GetParent(a), true);INT_PTR CALLBACK mydialog(HWND a, UINT b, WPARAM c, LPARAM d) { if (WM_CLOSE==b) { EndDialog(a,
2020-11-09 23:41:32 538
原创 java CAS包装类概述
原子更新基本类型:AtomicBooleanAtomicIntegerAtomicLong原子更新数组:4. AtomicIntegerArray5. AtomicReferenceArray6. AtomicReference原子更新引用7. AtomicReference8. AtomicRefernceFieldUpdater9. AtomicMarkableReference原子更新字段AtomicIntegerFieldUpdaterAtomicLongField
2020-11-09 18:09:58 269
原创 Atomic 特殊标记类
前言JDK提供了两个额外附加信息的Atomic帮助类,主要处理ABA类问题AtomicMarkableReferenceAtomicStampedReferenceAtomicMarkableReference额外添加了一个Boolean字段在其中,可以根据业务场景使用,如避免ABA问题,可是视为AtomicStampedReference精简版。AtomicStampedReference额外添加了一个Long类型字段在其中,可以避免ABA问题,甚至可以知道经过几次变化,相比Atom
2020-11-09 14:10:24 185
原创 java Atomic 字段类更新
我们会在某些需求下想要原子性更新某个类的某些字段,所以JUC提供了如下函数AtomicReferenceFieldUpdaterAtomicLongFieldUpdaterAtomicIntegerFieldUpdater本文仅使用AtomicReferenceFieldUpdater作为说明。下面是一个需求实例:我们有n个线程,每个线程需要从Conductor获取一个唯一的票id。class Conductor { //必须是volatile属性 volatile lo
2020-11-08 21:44:13 199
原创 WIN32发送自定义消息
在WIN32消息机制中,系统会发送各种消息到消息队列,开发可以调用GetMessage得到相关消息。WIN32的API也提供了对应开发自行的发送消息到消息队列的功能.SendMessageA直接发送消息到对应的窗口处理函数中,直到处理后函数才返回。PostMessageA将信息放入消息队列中,立即返回。//消息处理器LRESULT CALLBACK MYWNDPROC(HWND hwind, UINT unit, WPARAM wp, LPARAM lp) { if (WM_COMMAND =
2020-11-05 23:54:38 1425
原创 WIN32 资源加载
在Win32中图标样式,光标样式,菜单都是资源。而开发中我们这类资源,都记录在resource.h 和xxx.rc中。VS中双击rc文件跳转到资源视图即可管理资源相关下图是笔者几个资源分别为光标,图标,菜单.加载资源方式:在窗口类中指定,或者在窗口实例指定。如果窗口实例指定了某一个资源,那么窗口类的自动失效。关于资源id可以在资源视图的属性菜单栏中可见当然这一切的id都记录在头文件中...
2020-11-03 00:08:53 632
原创 java Atomic 数组类
前言我们看下Atomic对于数组类的封装AtomicIntegerArrayAtomicLongArrayAtomicReferenceArray我们这里以AtomicLongArray 来做说明。为什么需要退出数组类别的原子操作类?可见性问题原子性操作问题此类问题可以查看博主另一篇文章: java Atomic 基本数据类型函数说明AtomicLongArray 类方法如下:length()数组长度get(int i)具有volatile读特性方式读取数组
2020-11-01 23:41:07 310
原创 java Atomic 基本数据类型
前言本文讲解如下三个基本类型的原子帮助类。AtomicIntegerAtomicBooleanAtomicLong由于三个类所提供的函数都差不多我们以AtomicLong为例进行说明。我们首先看下我们为何需要原子帮助类。Long类型写操作不是原子性,会分为两个32位进行写入(读取是原子性,可以查看网上相关文献)。++i操作非原子性多线程可见性问题多线程数据竞争相关问题,如并发修改其中举例如下:假设 业务逻辑A和业务逻辑B只能执行一个,但是在上诉代码中有可能同
2020-11-01 14:33:20 851
原创 ArrayBlockingQueue 迭代器
ArrayBlockingQueue 是一个多线程容器,但是为了方便读者只管的理解,本文所有理解都在单线程下做演示效果,但是多线程的结果是一样。ArrayBlockingQueue 迭代器比较特殊:他不会像HashMap那样会出现ModifyException异常可以遍历出新插入的元素(前提是迭代前没有删除过全部元素的行为)会自动跳过其他线程删除的元素。(但是不会跳过第一个元素)如果迭代器和ArrayBlockingQueue相差两个循环操作以上,那么迭代器无效但是可以输出开始遍历第一个元素
2020-10-29 22:25:43 1021
原创 WIN32 手动编译
前言我们编译的相关工程目录如下:Main.cpp 源代码Project1.rc 资源文件resource.h 资源头文件定义我们简单看下源代码Main.cpp 就是一个简单的带菜单的UI界面代码编译cpp 为 objcl /c /EHsc Main.cpp参数说明:/c编译不连接/EHsc 异常处理上述命令会把cpp的中所有头文件展开,编译成obj汇编文件头文件的寻找优先级:如果是以#include<>引入的那么首先会在环境变量中查找。对应的环境遍历名为 inc
2020-10-28 23:58:36 982
原创 win32 Menu消息
当我们创建一个win32 菜单时,当点击某个item时会发送WM_COMMAND消息.其中返回的信息中wParam中高低位表示不同的感念 //1.窗口类设计 WNDCLASS wc; //构造一个菜单,IDMyMenu时rc文件创建的id,使用MAKEINTRESOURCE函数来转化为字符串 wc.lpszMenuName = MAKEINTRESOURCE(IDMyMenu);LRESULT CALLBACK MYWNDPROC(HWND hwind, UINT unit, WPARAM
2020-10-28 23:06:27 393
原创 WIN32 定时器消息
设置每隔多少秒后发送消息WM_TIMER //每间隔1000毫秒后发送一个WM_TIMER //注意最后一个参数是函数指针,如果为空会发送消息否则回调函数 //当前设置计时器的id为23.可以用这个id取消这个计时器。KillTimer函数可以用来取消对应id的计时器 //KillTimer(hwnd, 23); SetTimer(hwnd, 23, 1000,NULL); MSG msg; //5消息循环 while (GetMessage(&msg, hwnd, 0, 0))
2020-10-23 23:44:13 435 1
原创 WIN32 错误处理
我们调用Win32 相关函数时回经常出现各种错误,并且得到各种错误码,本文记录这方面的学习过程.如下win32函数重复注册两次,在运行时回弹出 "第二个错误"弹窗.int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow){ //1.窗口类设计 WNDCLASS wc; wc.
2020-10-20 21:56:20 1762
原创 SynchronizedXXX 系列并发容器分析
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2020-10-18 21:04:56 201
原创 ConcurrentHashMap 迭代器相关
在常规的HasMap或者ArrayList容器中一个线程再遍历中,其他线程插入或者删除会引起迭代器错误异常。ConcurrentHashMap可以支持并发情况下遍历元素 且可以感知到元素更新。例子我们看以下例子import java.util.Enumeration;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.TimeUnit;public class Main { public.
2020-10-11 18:04:43 1303 1
原创 ConcurrentHashMap addCount分析·
ConcurrentHashMap中addCount用于添加记录数和扩容判断添加记录我们首先分析添加记录数逻辑。第一次调用addCount函数下面的代码仅分析第一次调用时候//ConcurrentHashMap.java //@Contended注解是false shared(伪共享)相关知识可以参考本文引用文章 @sun.misc.Contended static final class CounterCell { volatile long value;
2020-10-07 18:30:44 1365
原创 ConcurrentHashMap transfer分析·
文章目录前言transfer初始化transfer哈希桶范围确定transfer 拷贝旧数据到新的哈希表参考文献前言本文分析1.8之下的源码。本文需要读者之前对HashMap有一定了解,如HashMap中的红黑树和链表等。我们回顾下HashMap基本结构:ConcurrentHashMap的扩容算法极其精妙,也是最晦涩难懂的部分.我首先将代码分段梳理各个部分的功能,在做细节说明。//ConcurrentHashMap.java private final void transfer(No
2020-10-07 00:18:38 938 1
原创 ReentrantLock Condition 分析
文章目录前言一、Condition类结构二、源码分析获得对象流程await 流程signal 流程前言Condition可以快速的帮助我们实现条件阻塞需求一、Condition类结构await:释放当前持有锁,然后进入休眠signal:唤醒进入休眠的线程其中有两个重要字段firstWaiter和lastWaiter。这两个字段会在ConditionObject中构造一个新的链表,用于存在await后休眠的线程,笔者在本文中称为,等候队列(等候列表)。而最原始的AQS链表笔者称为获取锁队列
2020-10-02 23:43:02 303
原创 ReentrantLock 超时锁2
本文需要前置知识,请参阅ReentrantLock 解决锁分析 1文章目录例子例子 ReentrantLock reentrantLock = new ReentrantLock(false); new Thread(new Runnable() { @Override public void run() { reentrantLock.lock(); .
2020-09-21 00:13:40 815
原创 ReentrantLock 锁分析 1
在阅读本文应对AQS有一定基础了解,可参阅博主其他博文AQS分析1-基于AQS自定义锁分析文章目录前言一、ReentrantLock基础用法二、类结构1.引入库2.读入数据总结前言ReentrantLock是一个基于AQS的可重入锁,实现了公平锁,非公平,超时,条件变量等一、ReentrantLock基础用法public class Main { public static void main(String[] args) { /** * 构造.
2020-09-20 18:24:12 363
原创 形形色色的Fragment生命周期
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Activity下的各类生命周期?二、使用步骤1.引入库2.读入数据总结前言 Fragment生命周期在不同的组件下使用具有不同的生命周期,如Activity中,viewpager2 或viewpager.一、Activity下的各类生命周期?二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot
2020-09-14 10:19:09 1124
原创 ASQ分析1-基于AQS自定义锁分析
AQS是并发包非常重要的基础锁类,我们看下如何利用其快速实现一个公平锁.public class SimpleLock extends AbstractQueuedSynchronizer { @Override protected boolean tryAcquire(int arg) { boolean compareAndSetState = compareAndSetState(0, 1); if (compareAndSetState) {
2020-09-06 01:08:41 323
原创 c-15 c++虚表
本文简单探究虚表实现。如下代码中有一个基类CPerson和子类CStudent:public.并有两个虚函数run和cry。#include<iostream>using namespace std;class CPerson {public: virtual void run() { cout << "Person is runing. \r\n"; } virtual void cry() { cout << "Person is cry.
2020-08-30 19:59:15 452
原创 自旋锁 CLH和CMS
在JAVA 中concurrent包中大多数API借助AQS完成,而AQS核心又在于CLH自旋锁上。The java.util.concurrent Synchronizer Framework
2020-08-23 21:40:03 497
原创 c-13 内联函数
我们看下以下几种函数:(1) 常规函数调用:需要进行参数入栈,栈堆保存,上下文保存,所以在效率略低。(2) 宏函数:高效,但多次调用会引起程序体积增大。不易调试等。(3) 内联函数高效,在Debug版本自动关闭内敛,方便调试,在Release版本开启内敛。#include<stdio.h>#include<iostream>#include <stdlib.h>using namespace std;inline int sum(int
2020-08-16 20:09:54 189
原创 我所理解的JMM--6 final内存语义
我们直接看一个如下代码然后引出问题:class FinalExample { int i; FinalExample(int i) { this.i = i; }}public class Main { static FinalExample finalExample; public static void main(String[] args) { Thread thread = new Thread(() -> fina
2020-08-16 16:50:16 236
原创 我所理解的JMM--5 volatile内存语义
综述本文讲解volatile在jsr 133规范内存语义,本文需要前置知识(1) new 是否为原子操作 博主对new的理解文章(2) 内存屏障 博主内存屏障知识点文章我们先看看volatile具有哪些功能(1) 保证long,double是单次读写的原子性(2) 变量的可见性(3) 基于happer-before规则下禁止重排序(1)保证long,double是单次读写的原子性背景硬件知识:数据总线:用于传输的管道.我们常规的现代化pc数据总线往往都低于64位.(64 位cp
2020-08-09 22:24:41 295
原创 c-11 堆内存
概述在c语言中,堆区可以自由被开发者掌控。高度的自由也需要带来高额的管理成本,如申请后需要手动释放,本文是笔者学习堆区的笔记。malloc和freemalloc:void *malloc( size_t size);参数:size申请堆内存大小。返回:成功返回内存地址,失败返回NULLmacllo内存格式:(注意博主在vs2015中内存结构如上图所示,不同编译器有所不同)堆类别决定系统如何管理这个块内存。#include<stdlib.h>int main(
2020-08-03 23:16:52 227
frida-12.8.20-py2.7-macosx-10.9-intel.egg
2020-04-05
AIDL bindservice流程图
2017-09-29
fastjson 阿里巴巴的解析生成json工具
2016-09-01
Android 控件顶部阴影如何添加?
2017-04-14
Git创建本地仓库后 如何给他人地址?地址是什么
2016-10-18
安卓最新studio2.1 导入github项目选择那一项 谢谢
2016-10-13
安卓SDK目录中build-tools是用来干嘛
2016-08-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人