0%

活性失败

在多线程并发的情况下,线程A和线程B都使用了变量V,如果线程A修改了共享变量V,线程B并不知道共享变量V已被线程A修改,这种情况就叫做活性失败。

活性失败是在并发编程中必须解决的问题,我们需要让各个线程之间对共享变量具有happen-before关系,通常使用Volatile或者加锁的方式来解决。

Volatile是Java提供的一种弱同步机制,当变量被volatile修饰后编译器不会将该变量的操作与其他内存操作进行重排序,使得任一线程对volatile变量进行了修改操作后,其他线程能立即知道修改的值。

快速失败(fail-fast)

当我们对部分集合(如ArrayList,HashMap)进行迭代操作时,如果存在对集合的添加或删除操作,将会导致迭代抛出ConcurrentModificationException异常,这就叫做快速失败。

阅读全文 »

AWK简介

awk是一种编程语言,用于在Linux/Unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。支持用户自定义函数和动态正则表达式等先进功能,它可以在命令行中使用,但更多是作为脚本来使用。
awk的处理文本和数据时会逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行指定操作。如果没有指定操作,则把匹配的行显示到标准输出(屏幕);如果没有指定模式,则所有行都要被指定操作处理。

AWK命令

1
$ awk '{Pattern + Action}' {FileNames}

Pattern表示awk在数据中查找的内容,而Action是在找到匹配内容时所执行的一系列命令。花括号({})不一定必须在程序中出现,但它们用于根据特定的模式对一系列指令进行分组。当Pattern是正则表达式时,需要用斜杠括起来。
awk的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息,通常awk是以文件的一行为处理单位。awk每接收文件的一行,然后执行相应的命令,来处理文本。

阅读全文 »

不记得我学习Python语法是啥时候的事情,只知道自己现在什么也记不住了。刚好自己有点小需要,就用Python把自己在某个APP上的数据数据拉下来吧!这个过程实在是太爽(can)了~
各种问题我都不想吐槽自己了,就把Python操作文件时遇到的几个问题写写吧。

文件编码

脑子果然是好使,一顿百度、复制和粘贴,代码我算是写完了。但是还都没有运行测试过,鄙人深知后面才真的是任重道运。
我打开Windows PowerShell客户端,洋洋洒洒十几个字母敲下去。先规范了几轮代码格式,终于没有提示格式错误了,也终于提示有真正的Bug了。。。

1
2
3
4
5
6
7
8
9
Z:\WorkSpace\Git\SimpleSpider\BoCai> python.exe .\pull.py
Traceback (most recent call last):
File ".\pull.py", line 248, in <module>
pullAll()
File ".\pull.py", line 246, in pullAll
pullBook(bookId)
File ".\pull.py", line 215, in pullBook
file_object.write(out)
UnicodeEncodeError: 'gbk' codec can't encode character '\U0001f625' in position 73431: illegal multibyte sequence

阅读全文 »

Vi编辑器是目前Linux和Unix上都会内置最基本的文本编辑器,是一种以字符模式工作的多模式编辑器。Vi的功能已经很齐全,而Vim则是Vi的增前版本,可以配置各种插件,代码补全、编译及错误跳转等方便编程的功能特别丰富,是程序猿(媛)不可或缺优良工具。

  • 本文将以Vim编辑器为主,进行一些基本的命令、动作和相关操作的讲解。

基本操作

我们可以通过在命令行“vim”进入到Vim编辑器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[BoCai@iZZ ~]$ vim
~
~ VIM - Vi IMproved
~
~ version 7.4.629
~ by Bram Moolenaar et al.
~ Modified by <bugzilla@redhat.com>
~ Vim is open source and freely distributable
~
~ Help poor children in Uganda!
~ type :help iccf<Enter> for information
~
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version7<Enter> for version info
~
~ 0,0-1 All

使用“vim FileName”命令,我们可以用Vim编辑器打开一个文件。

阅读全文 »

原本一个可以睡足懒觉的美好周日,却因为自己之前的马虎导致服务异常而被微信吵醒/(ㄒoㄒ)/~~
PS:本事故与阿里云无关!

故事是从一个星期之前,测试服务器的服务迁移开始的。因为公司业务调整,各个业务的相关测试服务也进行了必要的调整,服务器资源配置有的也进行了更新。
有台原来提供MySQL服务的测试服务器,用的是阿里云服务器(ECS),配置由原来的两核处理器4G内存降配为单核2G,MySQL的InnoDB引擎的缓存池大小innodb_buffer_pool_size也由3G降至1.5G,服务器降配后重启后MySQL服务正常。

然而,就在我周日想好好睡个懒觉的时候,一个早起在家加班的前端哥们儿炸了,为毛测试的Web服务不能用了,所有接口统统没有响应了。PS:我特别佩服早起撸码的同仁(`・ω・´)

阅读全文 »

发现问题

最近开始测试Dubbo服务,使用到了Jenkins的自动构建,并在构建完成后自动替换同版本文件,杀死对应的正在运行的进程。
但在本地测试无误进行Jenkins构建时,构建信息提示构建成功无误,Jenkins能够替换文件并解压,同时提示启动成功。

1
2
3
4
5
6
7
8
9
10
11
#构建日志
com-auth-provider/lib/netty-3.7.0.Final.jar
com-auth-provider/lib/logback-classic-1.0.13.jar
com-auth-provider/lib/logback-core-1.0.13.jar
com-auth-provider/lib/com-auth-provider-0.0.1.jar
Unzip File Success !
Starting the auth-provider ....OK!
PID: 29738
STDOUT: logs/stdout.log
Start Server.sh
Finished: SUCCESS

但在Dubbo注册中心没有发现对应服务提供者,同时没有找到对应的进程。

1
2
jenkins@iZubZ:/usr/local/jenkins/service# ps -ef|grep java|grep provider
jenkins@iZubZ:/usr/local/jenkins/service#

但是通过手动启动服务则没有问题,服务在注册中心注册成功,进程正常。

阅读全文 »

用了几年Eclipse,最近换着用IDEA试试,感觉界面看着很舒服,功能也很强大,就是用着快捷键挺费劲儿。
开始直接把快捷键换成了Eclipse的,然后能知道的快捷键就都局限在原来那几个了。
后来干脆把快捷键换原成IDEA默认的,然后慢慢摸索着用,又不知道的就问度娘。
但是我脑子不好使,有时候快捷键现在还要问度娘,现在干脆自己存个档。

  • 现在感觉快捷键都要乱套了!只是我一个人这样子吗!?(;´д`)ゞ
阅读全文 »

遇到一个坑

今天有个朋友问我一个问题,说跟着一个Linux操作教程,复制粘贴没有出来同样的效果。
要是说这个命令是一个非常负责的操作,涉及到各种环境什么的我就认了,关键它是个常用的ll命令。

1
2
3
4
5
6
root@iZZ:/home# wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.27/bin/apache-tomcat-8.5.27.tar.gz
root@iZZ:/home# cd test/
root@iZZ:/home/test# cp /home/apache-tomcat-8.5.27.tar.gz ./
root@iZZ:/home/test# tar -zxvf apache-tomcat-8.5.27.tar.gz
root@iZZ:/home/test# ll /home/test/ #这里出问题了!
bash: ll /home/test/: No such file or directory

看着这几命令,这兄弟完全不能相信自己的眼睛!“我是哪一步错了???”

阅读全文 »

自动档安装

Redmine的安装其实是件比较麻烦的事,不过Bitnami为我们提供了安装包,大家只要一直Next基本就可以搞定了。
Bitnami一体包会自动安装Apache、MySQL等环境,大家可以参考两个链接:Redmine InstallersRedmine安装配置指南

Bitnami Redmine提供Windows、OS X、Linux的一体安装包,目前最新版包含的组件版本如下:

  • Redmine 3.4.2
  • Apache 2.4.27
  • ImageMagick 6.9.8
  • MySQL 5.6.37
  • Subversion 1.9.7
  • Git 2.14.1
  • Ruby 2.3.4
  • Rails 4.2.8
  • RubyGems 2.6.13
阅读全文 »

今天在服务器想需要部署环境时,居然忘了服务器版本,yum源也出了点问题,就在网上偷两篇文章过来了当存档。

CentOS的发行版本

uname -a

可以获取内核名称、主机名、内核发行号、核版本、硬件名、处理器类型、硬件平台和操作系统

1
2
3
4
5
6
7
8
9
10
11
[BoCai@i564dsfaiYAZ ~]$ uname -a
Linux i564dsfaiYAZ 2.6.32-696.1.1.el6.x86_64 #1 SMP Tue Apr 11 17:13:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

#Linux 内核名称(uname -s, --kernel-name)
#i564dsfaiYAZ 主机名(uname -n, --nodename)
#6.32-696.1.1.el6.x86_64 内核发行号(uname -r, --kernel-release)
#1 SMP Tue Apr 11 17:13:24 UTC 2017 内核版本,实际上是标示的时间(uname -v, --kernel-version)
#x86_64 硬件名(uname -m, --machine)
#x86_64 处理器类型(uname -p, --processor)
#x86_64 硬件平台(uname -i, --hardware-platform)
#GNU/Linux 操作系统(uname -o, --operating-system)

阅读全文 »