IDEA-Scratches的一个问题
新建一个scratch,编写如下代码:
1 | List<String> list = Arrays.asList("11 22","22 11","32 44"); |
其中Arrays::stream,编译错误,提示Cannot resolve method ‘stream’
在工程中编写则无此错误。
IDEA版本:2018.3.2 UE版
JDK:jdk1.8.0_121
新建一个scratch,编写如下代码:
1 | List<String> list = Arrays.asList("11 22","22 11","32 44"); |
其中Arrays::stream,编译错误,提示Cannot resolve method ‘stream’
在工程中编写则无此错误。
IDEA版本:2018.3.2 UE版
JDK:jdk1.8.0_121
查询事务
SELECT * FROM information_schema.INNODB_TRX;
查询正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
查询等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
查询进程
show PROCESSLIST;
查询是否锁表
show OPEN TABLES where In_use > 0;
首先是repositories
,其中定义了一些远程仓库(私服)。本来是可以直接定义在POM.xml ,但是由于一个公司通常多个项目都是使用的同一个远程仓库(私服)。为了每个项目不重复定义。所以可以统一配置在settings.xml。由于settings下不能直接定义repositories
所以采用了profiles
。同时也可以使用profiles
做不同环境下的配置切换。
容易混淆的是mirrors
,配置多个mirror
,并不是每一个都会生效,始终只有第一个有用。另外mirrors
跟profiles没有什么直接关系,有关系的是repository
,mirrorOf
中配置的是repository id(支持表达式)。一般我们mirror
的都是central这类官方,因为mirror
的主要作用就是解决不同网络环境下,这种官方的或者第三方的仓库速度问题。如果你有私服,然后直接mirrorOf *
到了阿里云的镜像库,那么你私服的Jar可能就访问不到了。
maven找Jar的路径大概是,本地仓库>各个远程库,如果配置了镜像,则走镜像库。
server
配置的是maven私服账号密码信息,用于分发jar到私服时认证,通常在pom文件中会定义distributionManagement
,其中repository id 必须和server的id一致。
分发指的是deploy
。install
只会在本地库中存在。
可重复读描述的是一个事务在处理数据时,多次查询此数据得到的结果是一样的。MySQL的InnoDB存储引擎通过多版本并发控制(Multi_Version Concurrency Control, MVCC)机制来解决该问题。
幻读描述的是MVCC不能阻止插入新的数据,导致多次查询时数据记录不一致。
在Java中什么样的对象会被回收呢?
分布式系统为了保证数据不丢失,于是我们将数据做了多个副本放在了不同的服务器上【Partition tolerance(分区耐受性): 可靠性)】,并且保持更新多个副本,但是在更新副本的时候,可能由于网络等诸多原因导致其中一个或多个副本无法更新,此时就面临了一个选择:更新剩下的副本?or 都不更新了?
选择更新剩下的副本,则是选择了【Availability(可用性): 好的响应性能】,此类型系统保证了AP。
选择都不更新了,则是选择了【Consistency(一致性): 数据一致更新】,此类型系统保证了CP。
以上为个人片面且浅显的理解。
数据ID生成方案中UUID相对来说是最简单的,但是其也有不少缺点:
1.没有排序,无法保证趋势递增。
2.UUID往往是使用字符串存储,查询的效率比较低。
3.存储空间比较大,如果是海量数据库,就需要考虑存储量的问题。
4.传输数据量大
5.不可读。
常见优化方案:
1.优化字符串为BigInteger
1 | private static BigInteger pair() { |
2.去掉符号:
1 | private static BigInteger pair(UUID uuid) { |
KafkaSource 配置topic:topic1
KafkaSink 配置topic:topic2
从topic1拉取数据,经过简单处理后发到topic2
但是你会发现flume一直在循环读写topic1
原因就是KafkaSink中的这段代码:
1 | if (eventTopic == null) { |
首先从headers中获取TOPIC_HEADER(topic),然后优先使用。然而在KafkaSource中则会将topic1 PUT到Header中,所以导致循环读写topic1。
如何解决呢?
你可以重新KafkaSink,改掉上面那段代码。
或者配置一个拦截器,将KafkaSource 写到Header中的topic给替换掉:
1 | agent.sources.so1.interceptors.i1.type = static |
在做性能测试时,需要确保输入参数是确定的,否则处理参数还会带来一定的性能损耗。
JVM主要接受两类标志(少数例外):布尔标志和附带参数标志。
-XX:+FlagName
表示开启,-XX:-FlagName
表示关闭。-XX:FlagName=something
。例如-XX:NewRadio=N
。HashMap 默认有一个初始大小(initialCapacity),这个初始大小是16。
在各种开发规范手册中都可以看到会建议设置这个大小。
例如:new HashMap(3);
那么我们设置了初始容量为3,HashMap的容量真的会初始化为3了吗?
答案是否定的。
为了提高Hash效率,Java中会重新计算这个值,获得一个>3的最小2的N次方,大于3的最小2的N次方就是4(关于为什么请参照
https://www.zhihu.com/question/28562088/answer/111668116)。
这个4是怎么来的呢?