BlankCat

BlankCat


  • Home

  • Archives

  • Categories

  • Tags

  • About

  • Search
close

并发编程1-介绍

Posted on 2016-12-01   |   In 并发

在看完了《深入理解Java虚拟机》之后,继续看《Java并发编程实战一书》。
相信在了解虚拟机之后,再来看并发相关知识,能理解得更透彻,书中也讲到,对Java内存模型理解得越深入,就对并发编程掌握得越好。顺道说一下,关于JDK里线程和并发相关类的使用,我主要是通过《Think in Java》学习的,这里就不再介绍基本使用方法了。

简介

线程也被称为轻量级进程(这一部分在《深入理解Java虚拟机》中提到过,点击查看)。在大多数现代操作系统中, 都是以线程为基本的调度单位,而不是进程。

线程的优势

要想充分发挥多处理器系统的强大计算能力,线程可以有效的降低程序的开发和维护成本,同时提升复杂应用程序的性能。

Read more »

JVM12-线程安全与锁优化

Posted on 2016-11-25   |   In JVM

线程安全

当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。

Java语言中的线程安全

讨论线程安全,就限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程执行对它来说是完全没有区别的。我们将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程独立。

Read more »

JVM11-Java内存模型与线程

Posted on 2016-11-25   |   In JVM

「内存模型」可以理解为在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。

Java内存模型

Java虚拟机规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另外一台平台上并发访问却经常出错,因此在某些场景就必须针对不同的平台来编写程序。

主内存与工作内存

Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量与Java变成中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然不存在竞争问题。

Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的私有工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。(这很好的诠释了volatile关键字的作用和原理)

Read more »

Editor-tool

Posted on 2016-11-20   |   In 工具

##文章链接

  • 编辑器介绍

##好用的Markdown编辑器一览

  • dillinger

  • MaHua

  • 简书

  • 小书匠编辑器

  • Cmd Markdown

  • 简书

##Chrome插件

  • Marxico

  • 马克飞象

  • FarBox

  • Cmd Markdown

  • 小书匠编辑器

  • Sublime Text

  • Atom

  • Smark

  • MdCharm

  • Miu

  • Mou

  • Typora

  • MacDown

  • Byword

  • iA Writer

  • Ulysses

  • Typed

React-Native-打包apk

Posted on 2016-11-20   |   In React Native

##生成一个签名

  • 数字身份

  • keytool百科

使用keytool命令生成一个私有密钥

1
2
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

这条命令会要求你输入密钥库(keystore)和对应密钥的密码,然后设置一些发行相关的信息。最后它会生成一个叫做my-release-key.keystore的密钥库文件。
在运行上面这条语句之后,密钥库里应该已经生成了一个单独的密钥,有效期为10000天。–alias参数后面的别名是你将来为应用签名时所需要用到的,所以记得记录这个别名。
参数详解:
-dname “CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx” dn名为”CN=…”
-alias scent 别名为scent的一个证书
-keyalg
DSA RSA DSA或RSA算法(当使用-genkeypair参数)
DES DESede AES DES或DESede或AES算法(当使用-genseckey参数)
-keysize
512 ~ 1024 密钥的长度为512至1024之间(64的倍数)(当使用-genkeypair和-keyalg DSA参数)

1
2
> 512 密钥的长度大于512 (当使用-genkeypair和-keyalg RSA参数) 56 密钥的长度为56 (当使用-genseckey和-keyalg DES 参数) 112 168 密钥长度为112或168(当使用-genseckey和-keyalg DESede 参数) 128 192 256 密钥长度为128或192或256 (当使用-genseckey和-keyalg AES 参数)

-keypass 123456 这个证书的私钥密码为123456

-keystore prospectlib 证书库的名称为prospectlib

-storepass 123456 证书库的访问密码为123456

-validity 900 证书有效期为900天

-file scent.cer 从scent.cer文件导入证书,或者导出证书到

scent.cer文件

-v 显示详细信息

-rfc 以Base64的编码格式打印证书

-storetype JCEKS 密钥库的类型为JCEKS。常用的有JKS(默认),JCEKS(推荐),PKCS12,BKS,UBER。每个密钥库只可以是其中一种类型。

在桌面上会生成my-release-key.keystore文件

把my-release-key.keystore文件放到你工程中的android/app文件夹下。

编辑~/.gradle/gradle.properties,添加如下的代码(注意把其中的**替换为相应密码)

1
2
3
4
5
6
7
8
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

##添加签名到应用的gradle配置文件


编辑你工程目录下的android/app/build.gradle,添加如下的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
...
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...

##生成发行APK包


切换到android目录

1
2
3
cd android
gradlew assembleRelease

好像这个文件夹下要先有一个未签名的app-release-unaligned.apk 不懂 我执行了两次好了

##测试应用的发行版本

1
2
gradlew installRelease

安装到模拟器中,不会自动打开app,自己手动打开,不用再开启js 服务了,因为你的代码全部打包到apk中了。


##启用Proguard代码混淆来缩小APK文件的大小(可选)


Proguard是一个Java字节码混淆压缩工具,它可以移除掉React Native Java(和它的依赖库中)中没有被使用到的部分,最终有效的减少APK的大小。

重要:启用Proguard之后,你必须再次全面地测试你的应用。Proguard有时候需要为你引入的每个原生库做一些额外的配置。参见app/proguard-rules.pro文件。

要启用Proguard,编辑android/app/build.gradle文件

前后比较

code_sign

Posted on 2016-11-19   |   In 代码签名

《刘瑜写给女儿的信:愿你慢慢长大 》
小布谷,愿你慢慢长大。
愿你有好运气,如果没有,愿你在不幸中学会慈悲。
愿你被很多人爱,如果没有,愿你在寂寞中学会宽容。
愿你一生一世每天都可以睡到自然醒。

I am BlankCat,welcome to my blog;

技术要点

1
2
3
4
5
6
代码动画ffmpeg(谷歌一下)
http://www.asciiworld.com/
http://www.bilibili.com/topic/70.html
代码设计自己的个性签名

发布hexo博文命令

Posted on 2016-11-19   |   In hexo

I am BlankCat,welcome to my blog;

技术要点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
dubug命令
hexo s --debug
创建新文章(文章名字小写)
hexo new post 文章名字
发布文章
hexo g
hexo d
hexo clean
dubug命令
hexo s --debug

adb

Posted on 2016-11-19   |   In Android

《刘瑜写给女儿的信:愿你慢慢长大 》
小布谷,愿你慢慢长大。
愿你有好运气,如果没有,愿你在不幸中学会慈悲。
愿你被很多人爱,如果没有,愿你在寂寞中学会宽容。
愿你一生一世每天都可以睡到自然醒。

I am BlankCat ,welcome to my blog;

技术要点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
原文地址:
http://blog.csdn.net/gaojinshan/article/details/9382953
有时候ADB不能用,
并且会报以下的错误:
C:\Users\gaojs>adb devices
adb server is out of date. killing...
ADB server didn't ACK
* failed to start daemon *
error: unknown host service
用如下的命令,发现5037的端口被占用:
C:\Users\gaojs>adb nodaemon server
cannot bind 'tcp:5037'
用如下的命令,能查到什么进程占用了这个端口:
C:\Users\gaojs>netstat -ano | findstr "5037"
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 21152
TCP 127.0.0.1:5037 127.0.0.1:62629 ESTABLISHED 21152
TCP 127.0.0.1:5037 127.0.0.1:63942 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:63943 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:63944 TIME_WAIT 0
TCP 127.0.0.1:62629 127.0.0.1:5037 ESTABLISHED 2980
用如下命令,可以看到上述PID的进程,到底是什么了:
C:\Users\gaojs>tasklist | findstr "2980"
QQ.exe 2980 Console 4 60,712 K
C:\Users\gaojs>tasklist | findstr "21152"
tadb.exe 21152 Console 4 2,136 K
原来是腾讯这个无耻的家伙(tadb就是Tencent Adb)!
用如下的命令,将tadb.exe(PID:21152)杀掉:
C:\Users\gaojs>taskkill /f /pid 21152
然后,再试,就可以了:
C:\Users\gaojs>adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
4dfadcb86b00cf05 device
=============================查询进程号命令=========================
3.输入:
tasklist | findstr 端口(获取步骤2里面的端口,实际就是拿到了pid)
=============================杀死进程号命令=========================
4.taskkill /pid 端口(步骤3里面的端口) /F
杀死进程
http://blog.csdn.net/diaoruiqing/article/details/7851001
假如这个进程占用了你的端口号,那么用这个方法干掉它。
用Ctrl+Alt+Delete调出windows任务管理器窗口,
可以直接通过名称找到这个占用的进程,然后选择结束进程。
也可以通过PID号找到这个进程。
点击<查看>-><选择列>,勾选<PID(进程标识符号)>,找到并结束进程。
另外一个方法就是继续使用命令:
C:\>taskkill /f /t /javaw.exe
========================================================
执行命令
http://blog.csdn.net/u012842688/article/details/50916802
adb链接不到设备
adb devices
adb kill-server
adb start-server
adb device
固定命令(神模拟器)
adb connect 127.0.0.1:62001
adb device
原文地址
http://bbs.pediy.com/showthread.php?t=206396
=====================================================
根据应用进程id查看端口
任务管理器里面查找进程 pid
执行命令,找到对应的端口号
netstat -ano
======================================================

hexo技术总结

Posted on 2016-11-19   |   In blog

《愿你慢慢长大 》
小布谷,愿你慢慢长大。
愿你有好运气,如果没有,愿你在不幸中学会慈悲。
愿你被很多人爱,如果没有,愿你在寂寞中学会宽容。
愿你一生一世每天都可以睡到自然醒。

I am BlankCat,welcome to my blog;

技术要点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
半个小时搭建一个个人博客
hexo个人博客
http://blog.csdn.net/v123411739/article/details/44964065
搭建个人博客
http://www.cnblogs.com/zhcncn/p/4097881.html
搭建个人博客(重点)
http://blog.csdn.net/jzooo/article/details/46781805
个人博客搭建(知乎)
https://www.zhihu.com/question/20962496
hexo+github+多说
http://blog.netpi.me/%E5%AE%9E%E7%94%A8/hexo/
如何搭建一个个人博客(附文注册域名,维护站点)
http://cnfeat.com/blog/2014/05/10/how-to-build-a-blog/
mycat分库分表
http://blog.csdn.net/leipeng321123/article/details/50401376
搭建个人博客(****)
http://blog.csdn.net/jzooo/article/details/46781805
hexo上传失败解决
http://www.cnblogs.com/xsilence/p/6001938.html
博客主题
http://blog.xinspace.space/2016/04/11/%E8%87%AA%E5%AE%9A%E4%B9%89Hexo%E5%8D%9A%E5%AE%A2%E7%9A%84%E6%96%87%E7%AB%A0%E3%80%81%E8%8D%89%E7%A8%BF%E5%92%8C%E9%A1%B5%E9%9D%A2%E7%9A%84%E6%A8%A1%E6%9D%BF/
炫酷主题
https://github.com/iissnan/hexo-theme-next
使用文档
http://theme-next.iissnan.com/
hexo+next主题
http://www.jianshu.com/p/f66103553c45
hexo+github 总结
https://zhuanlan.zhihu.com/p/22632478
搭建博客(******)
http://www.jianshu.com/p/f66103553c45
$ hexo s --debug
优化
http://www.jeyzhang.com/hexo-next-add-post-views.html#
http://michaelxiang.me/2015/11/30/hexo-next-optimize/
发布博客
git config --global user.name ""
git config --global user.email ""
hexo d -g
发布文章
hexo上传失败解决
http://www.cnblogs.com/xsilence/p/6001938.html
$ hexo g
$ hexo d

cmd 命令

Posted on 2016-11-19   |   In Windows

I am BlankCat ,welcome to my blog;

技术要点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
The nexus service is already running with status: RUNNING
端口号被占用
1查看所有端口
netstat -ano
2查看固定端口
C:\>netstat -aon|findstr "8081"
协议 本地地址 外部地址 状态 PID
TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016
3.查看PID对应的进程
C:\>tasklist|findstr "2016"
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================
tor.exe 2016 Console 0 16,064 K
查看taskkill这个用法
C:\Windows\System32\taskkill /?
杀死进程
C:\Windows\System32\taskkill /PID 11052
强制杀死进程
C:\Windows\System32\taskkill /F /PID 11052

1…456…9
BlankCat

BlankCat

三岁学说话,一生学闭嘴!

84 posts
25 categories
46 tags
GitHub Weibo 开发导航 个人主页
© 2017 BlankCat
Powered by Hexo
Theme - NexT.Mist