HashMap 多线程下线程不安全案例

首先说下这个问题:今天线上报了一个空指针,上线了3年,第一次出现空指针的问题,看了下原来的代码,是向一个HashMap中保存一个变量,后面的代码会 从HashMap中获取这个值,由于HashMap不是线程安全的,所以可能出现此类问题,以下是代码的案例演示,可以看到虽然设置了值,但是在多线程下获取到的值还是null,当然这个并不是每次都会复现,多运行几次,就会出现为null的情况,将HashMap更换为ConcurrentMap,即可解决这个问题. import com.google.common.collect.Maps;import java.util.Map;import java.uti...

mac nodejs 升降级

之前写了一个项目 https://www.ijson.com 使用的是angularjs1.3.2 开发的,nodejs版本用的是1.6的版本。 但是公司目前部分项目想要运行,则必须升级nodejs到更高版本,如果升级了nodejs,我之前的项目则无法正常编译,所以这就涉及到,一台机器多个nodejs版本的切换 第一步,先查看本机node.js版本:$ node -v第二步,清除node.js的cache:$ sudo npm cache clean -f第三步,安装 n 工具,这个工具是专门用来管理node.js版本的,别怀疑这个工具的名字,是他是他就是他,他的名字就是 “n&r...

国内使用淘宝镜像源为npm和yarn提升安装依赖速度

如果觉得安装速度慢,安装源和原来 npm 是一样的,可以通用,修改方法如下: 在国内不管使用npm还是yarn,安装速度都很慢。因为镜像源地址在国外,有qiang的存在,导致速度很慢,这里换上淘宝的镜像源,即可加速安装速度 这里示例使用的是yarn,使用npm的用户将yarn改为npm即可。 yarn config get registry # 查看当前设置的镜像源地址# -> https://registry.yarnpkg.com可以改成 taobao 的源:yarn config set registry 'https://registry.npm.taobao.org' 然后...

Guava学习笔记:EventBus

EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 1. 首先定义一个事件中心,用于注册或者销毁或发送事件使用 package com.ijson.event;import com.google.common.eventbus.EventBus;/** * desc:事件中心,注册,销毁以及事件的分发 * version: 6.7 * Created by cuiyongxu on 2019/9/3 12:45 PM */publi...

Mongo 数据查询常用命令集

查询语法: db.collection.find(query, projection) query :可选,可以理解为sql的where条件,可以使用$and,$or,$exists等 projection :可选,可以理解为select * from ijson_data; 中的*;select name * from ijson_table;中的name,也就是我想要返回什么字段 1. 查询 work 字段是否存在 查询work存在的所有列db.getCollection('workflows').find({ "work":{"$exists"...

Linux查看当前目录下每个文件的大小

1. 查看当前目录下,每个目录及文件的大小(前提是有权限查看),如图,没有权限的会提示一下 du -sh * 2. 查看磁盘的使用情况 df -lh 3. 查看某个目录的大小 du -sh Downloads 4. 将当前目录下所有文件的大小给列出来。并将这些列出来的文件按照从大到小的方式排序 du -sh * | sort -nr 5. 将当前目录下所有文件的大小给列出来。并将这些列出来的文件按照从大到小的方式排序,且只要前10个 du -sh * | sort -nr | head 6. 将当前目录下所有文件的大小给列出来。并将这些列出来的文件按照从大到小的方式排序,且只要后10个 du...

算法学习路径

这篇文章不算是原创文章,下面的文章,是我在之前的公司,以为算法大师分享给我的,很感谢他,能让我对算法有更深的了解,感谢这位友人!LWJ 传统算法: 初级(先决条件:无):链表,队列,栈,二叉树,二叉堆,排序,DFS,BFS,floyd算法,并查集,树状数组,huffman树,trie树,哈希表 中级(先决条件:初级传统算法):A*,IDA*,DP,Dijkstra+堆,SPFA,prim,kuskal+堆,强联通分量,线段树,网络流,KMP,RMQ 高级(先决条件:中级传统算法):状态压缩DP,AC自动机,斐波那契堆等(这类不好学,看兴趣) 传统算法没有列全,列了一些常用的,每一个列出的算法至...

MAC应用无法打开或文件损坏的处理方法

有些用户下载了一些程序之后,却发现无法在MAC中安装,安装时会弹出下图所示警告框:“打不开 xxx,因为它来自身份不明的开发者”。那么该如何解决这个问题呢? 在MAC下安装一些软件时提示"来自身份不明开发者",其实这是MAC新系统启用了新的安全机制。 默认只信任 Mac App Store 下载的软件和拥有开发者 ID 签名的应用程序。 换句话说就是 MAC 系统默认只能安装靠谱渠道(有苹果审核的 Mac App Store)下载的软件或被认可的人开发的软件。 这当然是为了用户不会稀里糊涂安装流氓软件中招,但没有开发者签名的 “老实软件&...

java.lang.IllegalArgumentException: Document base D:\apache-tomcat-6.0.20\webapps\XXX doe

启动服务器,出现一下情况,是因为删除了tomcat中的项目,但是残留配置文件没有删除,解决方法:到服务器中(我用的是tomcat)找到了:conf\Catalina\localhost下有一个某个文件,比如;我报错的是b3log,那么路径下就有个b3log.xml,删除,就屁事没有了严重: Error starting static Resourcesjava.lang.IllegalArgumentException: Document base C:\tomcat\webapps\b3log does not exist or is not a readable directoryat o...

Linux下建立软链接及删除软链接

ln -s /var/ftp/pub /var/ftp/pub /var/ftp/pub/bank/3000/in /var/ftp/pub就是源文件(或目录) /var/ftp/pub/bank/3000/in是链接文件名 其作用是当进入/var/ftp/pub/bank/3000/in目录,实际上是链接进入了a目录\ 相当于在你的windows系统d盘有个文件或者目录,你点击右键选择"创建快捷方式到桌面",然后你点击桌面上的快捷方式,实际上打开的 是你d盘的文件或者是目录,是一个道理的 rm -rf /var/ftp/pub/bank/3000/in 注意不是rm -r...

JAVA实现Base64转码

package cn.jsprun.utils;import java.io.ByteArrayOutputStream;import java.io.UnsupportedEncodingException;public final class Base64 { private static final char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q...

maven 编译的时候跳过测试类

1. 第一种方式,在命令行下,转到要编译的项目目录下,执行以下脚本 mvn clean install -Dmaven.test.skip=true 2. 第二种,直接在pom文件中进行修改 <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> ...

Linux(Redhat,Centos) 关闭防火墙

1. 重启后永久生效 开启:chkconfig iptables on 关闭:chkconfig iptables off 2. 及时生效,重启后失效 开启:service iptables start 关闭:service iptabes stop

Git 回滚到指定版本并推送到远程分支

1. 首先需要做的是你得知道你想回滚到具体哪次提交的版本,执行 git log 自己看下 2. 执行 以下命令,用作回滚到具体哪次提交 git reset --hard <commit ID号> 3. 回滚完毕后需要推送到服务器,这个时候,会将你git服务器上的代码给覆盖掉,也就回滚到某个历史版本,具体是master还是其他分支,自己定一下就好 git push -f origin master 4. 也同样可以执行强推的方式执行 git push -f

Android关于uses-permission权限列表

android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在checkin数据库中,改值可以修改上传android.permission.ACCESS_COARSE_LOCATION允许一个程序访问CellID或WiFi来获取粗略的位置android.permission.ACCESS_FINE_LOCATION允许一个程序访问精良位置(如GPS)android.permission.ACCESS_LOCATION_EXTRA_COMMANDS允许应用程序访问额外的位置提供命令android.permi...

JAVA 实现FTP文件上传

package cn.jsprun.utils;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URL;import java.security.NoSuchAlgorithmException;import org.apache.commons.net.ftp.FTPClient;import org.apache.com...

MAC Charles 安装及使用

下载安装包,官网地址:https://www.charlesproxy.com/download/ 下载对应版本的包,并进行安装 安装后,非https的请求可以直接使用 http使用需要进行https配置,点击help->SSLProxying -> Install Charles Root Certificate 搜索Charles ,就能够看到以下内容,可能大家看到的内容和我不一样,大家的应该是前面的是红色的叉,显示不信任该证书 右击查看 显示简介->信任-> 使用此证书时 -> 始终信任,大家的图标就和我的一样了 回到工具首页,点击Proxy->SSL...

Linux(Redhat,CentOS) 释放被占用端口

注意:必须使用root用户才能操作,不然无法看到端口的进程 场景: web应用启动的时候,自动启动了socket端口:9001,9002,当我关闭了tomcat,这两个端口却一直处于占用状态,导致我第二次启动tomcat的时候,一直处于端口被占用状态. 过程: 1.输入netstat -tln,查看系统当前所有被占用端口,主要是为了查看你的端口是否真正的被占用着,搭建可以看到我的9001,和9002端口都已经被占用了,所以我需要释放这两个端口 2.根据端口查询进程,输入lsof -i :9001,切记不要忘了添加冒号,如下图,就可以看到当前被占用的端口的进程 的进程编号 3.既然知道进程号了,...

设置easyui-datagrid标题及内容的位置

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Complex DataGrid - jQuery EasyUI Demo<...

Java 占位补足

/** * description:  补足补空格,补足补*,缺什么补什么 * @author xyc 创建时间:2015-1-9   */public class Test0 { public static void main(String[] args) { System.out.println(noZero("11", 10, "left")); System.out.println(noZero("11", 10, "")); } /** * de...

Popular Articles
Recently published