Fork me on GitHub

《Java高级开发工程师》直播课Ⅶ

视频地址 https://www.youtube.com/watch?v=g31E6LI6pfY&list=PLStUqVcO94bhQrlAUYOTxFIjVpwjYYeUb

课时1:互联网分布式系统核心组件 详解ELK日志管理体系

一个完整的集中式日系统,需要包含以下几个主要特点

  • 收集 - 能够采集多种来源的日志数据
  • 传输 - 能够稳定的把日志数据传输到中央系统
  • 转换 - 能够对收集的日志数据进行转换处理
  • 存储 - 如何存储日志数据
  • 分析 - 可以支持UI分析
  • 告警 - 能够提供错误报告,监控机制

阅读更多...

什么能力很重要,但大多数人却没有?

原文地址 https://www.zhihu.com/question/305507128/answer/651372493

可以接受快感被延迟的能力。** 90%的废人,根本原因在于这项能力的缺失,耐不住寂寞啊!

每天刷短视频和公众号停不下来、一直穷的很稳定、买来的书没有好好读完过、做事三分钟热度、每天感觉迷茫、老跟爱人吵架,要是有人问起,道理都懂,你为什么一直就做不好呢?

我听过最多的回答是:

  • 我这人就是自制力差点,其实我很有潜力的,我知道我很聪明;
  • 我知道我应该好好的爱你,我该对你好,可是,我就是控制不住自己,就是不想去做;
  • 我努力也就是这样,不努力也就是这样,我出生就是个下层人;
  • 我怎么就这么拖延呢,我得去学学如何克制自己的拖延症了;
  • 我弄几下就觉得很烦,没耐心,就走神搞别的去了;

没错,很小的时候,我也这样安慰自己。考试成绩不理想找原因,好多人和我一样在每学期开始的学期计划里写上要提高自制力,其实我们也不知道啥叫自制力,就听老师每次骂我们是最差的一届时,最后都会带一句“真是一点自制力都没有,我一走你们就放羊了。”,所以我们应景的以为“考试不咋地都是自制力的麻烦”,写完学期计划为了向逼着要成绩的老爸老妈表忠心,也为了应付班主任的暴力催收,还煞有其事的列了一个学习计划,写明自己每天的时间要如何安排。

老爸老妈一签字,老师朱笔一挥潇洒的写个阅,短则三天长则两周,这张纸就夹在某本习题集的附页里跟那些旧卷子堆在一块,再也没被翻动过了。当时踌躇满志仔细推敲过可行性的计划,还用透明尺子仔细画了表格对仗工整,包括跟老师和父母打的包票,也跟着一块消失掉,直到学期末想起来,才觉这学期也没干啥。

好像看多了言情小说情节异界大魔王爱上平胸邋遢女的小女孩每次难过都要喊“我一定要坚强!”

我贱兮兮的问她“什么叫坚强?”

她闷住一把鼻涕哭声中断好一会儿才接上“我不知道!我只知道我还有很多要学习!我要坚强”

我目光坚定的搂着她的肩膀告诉她“坚强是你能不断咽下眼前的苟且,始终充满希望和干劲,努力到曙光降临的那一刻!”

…………………………………………………………………………………………

好吧,这是十年之后我回想起当时那个姑娘,想对她说的话。十年前我一直在劝她不要哭了,乖宝宝。当时,我觉得坚强的概念等于不哭。

我当时没想明白,为什么我们明知道这样下去多半是个废柴,却还是不会努力去做那些被老师和父母指出的正确的路。哪怕是谈个恋爱,明知道对对方好一点少计较一点就能和和美美,但多半没少闹脾气把关系搞僵。

少数勇争上游的,理由五花八门,有的是学士世家,一家人本科起步最高是博士后,从小的教育就是看书和学习,为了优秀而学习;有的是家里太穷了,不上学就得回去种地,上的不好就有理由被抓回去了,上的好以后还有赚大钱的希望;有的是家里逼得太紧,各种给压力威胁,给甜枣诱惑,我妹妹舍友某人后半夜突然爬起来在被窝里背单词到第二天早上,众人才发现她已经语无伦次彻底疯了;有的是政府大院的,整体成绩都好,你成绩不好小时候的玩伴面前抬不起头。

不管是为了美好生活还是为了以后赚大钱做高官,成为学者还是超过同伴有面子,哪怕是被父母逼着来的,反正大家都在父母的安排下进入学校把书给念了,一边念书一边在计算放假日期,在放假前的最后一个下午个个笑的合不拢嘴,盼着开学的时候再来一次非典那样的大事件,这样就不用来学校了。

我们就这样从初高中上到大学,到大学毕业进社会了,依旧没什么长进。

看起来我们学历更高了,技能更多了,工资在逐年提升,想换工作找一找总是有的,也能坐办公室了,随时上网获取各种各样的信息和知识,大多数的课程都不贵,少则几块钱多则几千块,狠狠心万把块的课也能报。比起上一代在阳光下和酒桌上讨食,我们在办公室看起来要高级许多。

阅读更多...

为什么阿里巴巴要求谨慎使用ArrayList中的subList方法

原文地址 https://www.hollischuang.com/archives/3775

原位作者 Hollis

集合是Java开发日常开发中经常会使用到的。在之前的一些文章中,我们介绍过一些关于使用集合类应该注意的事项,如《为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作》、《为什么阿里巴巴建议集合初始化时,指定集合容量大小》等。

关于集合类,《阿里巴巴Java开发手册》中其实还有另外一个规定:

-w1379

本文就来分析一下为什么会有如此建议?其背后的原理是什么?

subList

subList是List接口中定义的一个方法,该方法主要用于返回一个集合中的一段、可以理解为截取一个集合中的部分元素,他的返回值也是一个List。

如以下代码:

1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
List<String> names = new ArrayList<String>() {{
add("Hollis");
add("hollischuang");
add("H");
}};

List subList = names.subList(0, 1);
System.out.println(subList);
}

以上代码输出结果为:

1
[Hollis]

如果我们改动下代码,将subList的返回值强转成ArrayList试一下:

1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
List<String> names = new ArrayList<String>() {{
add("Hollis");
add("hollischuang");
add("H");
}};

ArrayList subList = names.subList(0, 1);
System.out.println(subList);
}

以上代码将抛出异常:

1
java.lang.ClassCastException: java.util.ArrayList$SubList cannot be cast to java.util.ArrayList

不只是强转成ArrayList会报错,强转成LinkedList、Vector等List的实现类同样也都会报错。

那么,为什么会发生这样的报错呢?我们接下来深入分析一下。

底层原理

首先,我们看下subList方法给我们返回的List到底是个什么东西,这一点在JDK源码中注释是这样说的:

Returns a view of the portion of this list between the specifiedfromIndex, inclusive, and toIndex, exclusive.

也就是说subList 返回是一个视图,那么什么叫做视图呢?

我们看下subList的源码:

阅读更多...

HashSet、LinkedHashSet和TreeSet三者区别与联系

一.HashSet

特点:

1.HashSet中不能有相同的元素,可以有一个Null元素,存入的元素是无序的。

2.HashSet如何保证唯一性?

​ 1).HashSet底层数据结构是哈希表,哈希表就是存储唯一系列的表,而哈希值是由对象的hashCode()方法生成。

​ 2).确保唯一性的两个方法:hashCode()和equals()方法。

3.添加、删除操作时间复杂度都是O(1)。

4.非线程安全

二.LinkedHashSet

特点:

1.LinkedHashSet中不能有相同元素,可以有一个Null元素,元素严格按照放入的顺序排列。

2.LinkedHashSet如何保证有序和唯一性?

​ 1).底层数据结构由哈希表和链表组成。

​ 2).链表保证了元素的有序即存储和取出一致,哈希表保证了元素的唯一性。

3.添加、删除操作时间复杂度都是O(1)。

4.非线程安全

三.TreeSet

特点:

1.TreeSet是中不能有相同元素,不可以有Null元素,根据元素的自然顺序进行排序。

2.TreeSet如何保证元素的排序和唯一性?

底层的数据结构是红黑树(一种自平衡二叉查找树)

3.添加、删除操作时间复杂度都是O(log(n))

4.非线程安全

四.总结:

通过以上特点可以分析出,三者都保证了元素的唯一性,如果无排序要求可以选用HashSet;如果想取出元素的顺序和放入元素的顺序相同,那么可以选用LinkedHashSet。如果想插入、删除立即排序或者按照一定规则排序可以选用TreeSet。

Gustave Le Bon 《乌合之众》

每个成功者,每个得到承认的观念,仅仅因为成功这一事实,便不再收到人们的怀疑。

成功是通往名望的主要台阶,其证据就是成功一旦消失,名望几乎也总是随之消息。

昨天受群众拥戴的英雄一旦失败,今天就会受到侮辱。当然,名望越高,反应也会越强烈。

在这种情况下,群众会把陌路英雄视为自己的同类,为自己曾向一个已不复存在的权威低头哈腰而进行报复…信徒们总是穷凶极恶的打碎他们以前神灵的塑像。

————Gustave Le Bon《乌合之众》

MySQL优化--where条件字段的顺序对效率的影响

学生表 Student

id(编号) name(名字) age(年龄) height(身高)
1 Tommy 26 170
2 Jerry 23 180
3 Frank 30 160

如表所示,这里只是呈现了3条数据,我们这里假设有1万条数据,

查询年龄25岁以上,身高170以上的全部学生

1
Select * from Student where age > 25 and height > 170;//正常情况下可以这么写,

假设1:年龄在25岁以上的有8000个学生,而身高170以上的只有10个学生,

上述的SQL的执行顺序和查询的行数应该是:

  1. 先查询年龄25岁以上的学生,结果有8000条记录,

  2. 再查询身高170以上的学生,就得在8000条结果里再次判断,最坏的可以遍历8000次左右,这效率较低

假如更改上述SQL语句where条件字段的顺序,如下:

1
Select * from Student where height > 170 and age > 25;

那么结果将是:

  1. 首先是查询出身高170以上的学生,结果只有10个;

  2. 然后再在这10个结果中查询出年龄大于25岁的学生,这样遍历的次数一下子就减少了很多很多

总结:所以,千万不要以为where语句中字段的顺序可以随便乱写,应该结合具体情况来安排好顺序,以使效率更高,

当然,如果想效率进一步提高,应该在这两个字段上建立索引 (题外: 索引的建立以及 什么条件下索引才会被调用)

布隆过滤器 Bloom Filter

视频地址 https://www.bilibili.com/video/av55398985/?p=58

布隆过滤器 Bloom Filter

一个很长的二进制向量和一个映射函数。

布隆过滤器可以用于检索一个元素是否在一个集合中。

它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

不在就确定不在

在可以不准确,需要在数据库或文件再查下

  • Copyrights © 2015-2023 高行行
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信