gofor's blog

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

LongAdder浅析

发表于 2020-01-10 分类于 技术 阅读次数: Valine:

LongAdder浅析

LongAdder类是在java8中新加入的并发环境下高性能的计数器类成员。该类主要通过CAS的原理和分散竞争的思想,实现并发环境下的计数效率。
该类继承了内部抽象类Striped64(基础计数器和分散竞争),并间接实现Number接口(负责数值类型的转换)。
其核心思想还是Striped64,该类的解析见Striped64学习。

阅读全文 »

Striped64 学习

发表于 2020-01-08 更新于 2020-01-10 分类于 技术 阅读次数: Valine:

Striped64 学习

很长一段时间,不知道Striped64这个类的存在,当然,还是由于对并发包不了解的缘故。在大概了解了一下之后,才知道,原来这是一个并发计数组件,这个类很有意思,在这里学习总结一下。

简单介绍

Striped64是在java8中新增的用于支持累加器的并发组件(和LongAdder、DoubleAdder一起增加的一个抽象内部类),它支持在并发环境下计数,其设计思想是避免线程激烈竞争时引起的开销和异常,通过分散竞争的方式(允许不超过CPU核心数个线程同时执行)实现最大效率。
在Striped64内部维护了3个重要操作变量,分别是:cells(Cell类型的数组)、base(基础计数器)、cellsBusy(Cell数组状态值)。Cell对象内部维护了一个计数值value,用来记录线程局部计数值。

阅读全文 »

SSH快速远程连接配置

发表于 2019-11-11 更新于 2019-12-01 分类于 Network 阅读次数: Valine:

在连接SSH时候,往往要输入一串的命令,包括用户名密码及端口,比如ssh userName@serverIP,该命令为连接到serverIP端口号为22的远程主机,连接时需要输入密码进行认证。这种方式命令较长较难记,如果密码也很难记,那每次SSH都很麻烦。

通过密钥认证方式可以在避免输入密码的情况下连接到SSH远程主机,该方式通过ssh-copy-id将本地公钥传输到SSH远程主机的authorized_keys文件中,目的是在SSH客户端登录的时候,通过该公钥来验证客户端。

ssh-copy-id的基本语法为ssh-copy-id [-i [identity_file]] [user@]machine [-p port],其中,-i为指定公钥文件,-p为指定端口。

示例:

ssh-copy-id -i ~/.ssh/id_rsa.pub userName@serverIP -p port

如果用户权限不足,可以通过命令chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys更改文件权限。

以上只是简化了密码的输入,还可以通过简化命令的方式实现快速进入,即通过配置命令别名的方式实现。在本地环境中,进入~/.bash_profile文件,追加别名命令alais sshCommand="ssh userName@serverIP -p port",如果~/.bash_profile文件不存在,则新建,配置完成后,通过命令source ~/.bash_profile使其生效。

如果Mac中使用iterm,可能快捷命令并不会生效,需要编辑.zshrc文件,添加以下内容即可避免每次进入都需要使用source命令编译。

1
2
3
if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi

最后,在终端中输入命令别名sshCommand即可连接到远程主机。

解决Springboot2中依赖本地项目Gradle5编译异常问题

发表于 2019-11-04 分类于 问题 阅读次数: Valine:

问题描述

在Idea中使用gradle5配置springboot2项目,该项目下有两个子项目,如:Project {subA, subB},其中subA项目依赖subB(非springboot项目)项目implementation project(':subB'),在使用gradle build时,控制台抛出类似如下异常:

1
2
3
/Users/xxxx/xxx/xxx/solby/xboot/src/main/java/me/solby/xboot/tookit/aspect/RequestLimitAspect.java:6: 错误: 程序包me.solby.xoauth.common不存在
import me.solby.xtool.common.UserSessionHolder;
^

该类异常表示找不到类所在包,但是通过idea的方式编译或运行,都不会有问题。

阅读全文 »

java11+springboot2+gradle5+idea+lombok 编译失败问题记录

发表于 2019-11-02 更新于 2020-01-10 分类于 技术 阅读次数: Valine:

问题描述

在开发个人项目时,使用到了Java11+Springboot2+Gradle5+IDEA+Lombok技术,采用Gradle多项目模式,其中A项目依赖B项目,在IDEA中Lombok使用正常,但是使用Gradle编译构建时,会抛出异常,提示找不到符号,即无法获取到到使用了Lombok相关注解的类和属性。

阅读全文 »

SpringBoot多模块I18N配置无效,导致No message found under code 'xxx' for locale 'zh_CN_#Hans'问题

发表于 2019-08-28 更新于 2020-01-10 分类于 技术 阅读次数: Valine:

在SpringBoot多模块项目开发中,新增了国际化配置

1
2
3
4
5
6
spring: 
# 国际化文件路径配置
messages:
basename: i18n/messages
encoding: UTF-8
fallbackToSystemLocale: false

Resource目录下存在i18n/messages,文件中配置key=value。

异常

使用时遇到org.springframework.context.NoSuchMessageException: No message found under code 'error.xxxx.message' for locale 'zh_CN_#Hans'。

排查
  • 检查配置项是否正确;
  • 检查Resource目录下文件是否存在;
  • 检查文件中key=value是否存在;
  • 检查编码文件编码是否为UTF_8;

经过排查,发现以上问题均不存在,且断点进入MessageSource相关方法中发现parentMessageSource始终为空。

解决

后来,看了下messages的配置位置,是在被依赖模块的application.yml配置文件中,想到应该是项目启动后,使用过程中并未在启动项目的Resource目录下发现i18n/messages,而配置生效的路径则为被依赖模块的Resource目录下,因此,导致在被依赖模块目录下找不到i18n/messages而报错。

将配置转移到启动项目的配置文件中,再次测试国际化正常。

Redis数据类型

发表于 2019-01-20 更新于 2020-01-10 分类于 技术 阅读次数: Valine:

Redis常用数据类型:

  • strings:二进制安全的字符串;
  • lists:根据插入顺序排序的字符串元素的集合,基本上是链表;
  • sets:唯一的,未排序的字符串元素的集合;
  • zsets:有序集合,没个字符串元素都与一个浮点数关联,称为分数,元素总是按分数排序;
  • hashs:散列或字典,是由与值相关联的字段组成的映射,字段和值都是字符串;
阅读全文 »

Java 性能调优(一)

发表于 2018-12-15 更新于 2020-01-10 分类于 技术 阅读次数: Valine:

造成系统瓶颈计算资源的因素有很多,包括CPU资源的调度、内存的读写、磁盘IO、网络IO、数据库、竞争锁、异常等。而系统性能的衡量指标有响应时间、启动时间、执行时间、执行速度、磁盘吞吐量、网络吞吐量、负载承受能力等。那么,从软件的角度看,性能优化的目标有,编写更高效的代码、使用更高效的算法、减少竞争锁、分布式集群、微服务等。而性能的优化策略有,用空间换时间、用时间换空间、优化代码、并行处理等。系统的优化来自三个方面,基础技术、层次方面、架构方面。

阅读全文 »

Mybatis知识点梳理

发表于 2018-12-12 更新于 2020-01-10 分类于 技术 阅读次数: Valine:

Mybatis架构图:

Mybatis架构图

阅读全文 »

技术类相关概念整理

发表于 2018-12-12 更新于 2020-01-10 分类于 技术 阅读次数: Valine:

技术名称/概念太多,一些很少用到但是要接触的概念还是要记录下来,写在这里的目的是,进来就能看到。

阅读全文 »
12
gofor

gofor

Programming technology
14 日志
4 分类
14 标签
RSS
GitHub StackOverflow
Creative Commons
© 2016 – 2020 gofor
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Pisces v7.3.0
0%