小知识点快览(不定期更新)

  1. java自加减[++,--]操作不是单个操作,包含三个独立操作: 读取value, 将value加1,将结果写入value. 所以存在线程安全问题.
  2. 如果你频繁要切换数据库,用hibernate/jpa 肯定比mybatis方便了.
     hibernate代码写起来快,好维护,以前公司用hibernate,后来加入了mybatis混合写,普通接口用h,性能接口用m. hibernate有个不好的地方就是 select 的 projection 不能动态传入,导致 where 条件经常重复写,例如 findById. hibernate 背后是 JPA,可惜 JPA规范只给出了 Interface 和 Class DTO 允许泛型传入. 但是最理想的结果还是传入 字段名称,用字符串数组传入, 例如 findById(String id, String...fields). 例如 findById(String id, String...fields).
  3. 《图解Java多线程设计模式》对于多线程初学者挺有帮助.
  4. DDD红皮书《实现领域驱动设计》最精华的部分是 战略篇,里面的各种架构 建模方法论比IDDD要详细多了。
  5. 用二进制存储存储数据比存文本更节省空间, hadoop也是用streaming把二进制处理为正常字符串放到hdfs. [ip用二进制存全球ip也就几十m, 说实话 tcp/IP协议 里面 ip就是2进制做的 是最符合这个业务本身的设计,变成点分形式 只是为了 可读, 尤其是 当你需要 4网划分的时候 你会发现 用字符串处理 的代码量是2进制的10倍还多,而且不好读]
  6. update比insert慢多少了?
     insert 如果是ssd盘 tps有12000, update 只有 5000, 如果是 stat盘 insert tps是8000, update只有3000.
  7. 用国际通信区域码做国际化是有坑的, 因为北美的手机国际码都是一样的(通行码一致, 但是使用的语言并不一样).
  8. Spring会检测要代理的类是否有实现接口来选择是使用cglib proxy还是jdk proxy.
  9. parallelStream 是给Map Reduce操作做多线程处理, 是并发处理集合元素的回调, 普通的stream只能线性处理, 具体可以看看算法导论的多线程算法, 一般集合size很小,就不需要用 parallelStream, 一般web应用都不会用到 并行流. 只有纯cpu任务建议使用parallelStream.
  10. exit 0和 非0都是跟linux操作系统有关, 对于linux来说非0都是代表执行不成功,操作系统会记录日志, 良好脚本边写习惯就是在最后return 0,代表执行成功,否则代表执行不成功. System.exit(xx)的作用是把xx内容返回给调用方.
  11. Mysql的timestamp类型字段会跟着更新数据而更新, 所以一个表中最好只使用一个timestamp类型字段, 用作最后操作时间.
  12. 在构造函数内对一个final域的写入, 与随后把这个被构造的对象引用复制给一个引用变量, 这个两个擦欧洲之间不能重排序.
  13. 初次读一个包含final域对象的引用, 与随后初次读这个final域, 这两个操作之间不能重排序.
  14. redis的问一睛,hash结构的,所有filed都删除完了的话,是不是那个key会自动消失?所有的filed都没有的话,那个key就没有了.
  15. 堆快照 分析工具 目前哪个比较好呢? MAT? JVisualVM方便.
  16. 玩es 一般是用 spring data elasticsearch 还是用jest? data. transportclient. http.
  17. http请求工具: RestTemplate、Rotrofit、spring boot feign、httpclient、okhttp。
  18. 缓存穿透: 查询一个在缓存内必然不存在的数据, 导致每次请求都要到存储层去查询, 失去了缓存的意义. 在流量大时, 可能DB就挂掉了, 缓存击穿是黑客攻击系统的常用手段. 解决方案: 1: 将查询为空的数据也缓存起来, 但这会导致缓存存在很多的无效数据, 其次会导致正常请求数据出现误差(第一次请求时, 没有数据, 但是某个操作后存在了数据, 但依然查询不到). 2: 使用布隆过滤器来解决缓存穿透的问题[可以使用guava的BloomFilter实现].
  19. 缓存雪崩: 1. 缓存失效期: 给定key设置的生存时间, 当key过期时, 它自动删除; 2. 因为缓存失效导致数据为加载到缓存中, 或者缓存同一时间大面积失效, 从而导致所有请求都去查数据库, 导致数据库CPU和内存负责过高, 甚至宕机.
     1.缓存大面积的同时失效:
       避免缓存设置相近的有效期.
       1. 为有效期增加随机值.
       2. 统一规划有效期, 失效时间均匀分布.
     2.对热点数据的持续高并发:
       互斥锁[锁粒度控制], 例如对某个key只允许一个线程查询数据库和写缓存, 其他线程等待.
       1. JVM锁机制(服务或annotation)[可重入锁].
       2. 分布式锁机制(redis, zk, database).
       缺点: 线程阻塞, 用户体验差[双缓存策略]
     3. 有效期本身的机制:
       缓存用不过期, 异步更新
       优点: 不阻塞线程, 用户体验好, 不会出现雪崩效应.
       缺点: 不保证一致性, 代码复杂度增大(每个value都要维护异步更新代码), 容易堆积垃圾数据.
     4. 做二级缓存, A1为原始缓存, A2为拷贝缓存, A1失效时, 可以范围A2, A1缓存失效时间设置为短期, A2设置为长期(此点做补充).
  20. 分布式中怎么实现顺序访问? 状态机.
  21. 保证幂等的方式很多种,有些方案是加一张幂等表,由唯一标识的唯一索引来保证不重复处理。。。一个请求处理完之后把结果集放到幂等表中,第二个请求进来发现处理过了就直接去 幂等表中的结果集. 也有人是用 redis 来做的,也可以用 分布式锁 来去重.
  22. 服务端发现请求的唯一标识重复了有两种处理方式
    1、直接拒绝该请求
    2、等待第一个请求处理完成,取得其处理结果并返回
  23. socket直连银行的系统,netty可以替代java 的socket吗?可以.
  24. 分布式锁 有2种释放方式。1个是拥有者 1个是引擎自维护的超时机制。 tair也有超时。对标锁的意义是:保护安全区,但是只保护一会。
  25. 现在是这么一个格局:
    Kotlin、JS、Swift、C#:客户端开发
    Java:企业级应用层开发
    Go:PaaS基础设施开发
    C++:基础设施的底层驱动开发
  26. java中位移(<<, >>..)运算优先级低于加减优先级. sout(1< 5 + 1) = 64.sout((1<<5) + 1) = 33.
  27. 敏捷开发的本质就是一开始谁都想不明白,先做, 出问题再改. 此所谓: 面向变化、面向重构。
  28. 查看漏洞平台: 漏洞盒子, 补天.
  29. netty下不要用log4j, 这种多线程环境下log4j容易deadlock. 以前用mina的时候log4j的filewatch死锁了, 就是那个监听配置文件改动的类.log4j确实在高并发的情况下会阻塞,可以自己重写appender, 开启缓存,设置定时刷新.
  30. epoll比select高效有两点,1每次调用不用把fds之类数组都传递给内核,2只处理发生事件的fd,不用轮训。所以epoll高效的前提是大量的并发.(epoll要2.6內核開始支持).
  31. es中我搜索nz,如何只是nz,而不是有n,或者有z也给查出来? lucene可以设置查询步长, 就是字母或短语的间距 n和z之间设置0就代表n和z连着 但zn也能查出来. 用and或者"minimum_should_match": 2.
  32. 分布式任务调度解决框架: quartz, elasticjob, tbs,xxl-job, opencron, LTS.
  33. 使用zookeeper实现分布式定时任务: 多态同时触发, 去竞争一个执行锁, 最后只有第一个拿到锁并执行,没有拿到锁的直接停止.
  34. kafka监控开源软件: kafka admin, kafka eagle.
  35. java进程监控程序: pinpoint、prometheus 、grafana。
  36. 发送消息方式如果要kafka自己保证幂等,不重复发送消息,需要满足:
    1,enable.idempotence必须为true
    2,acks为all
    3,max.in.flight.requests.per.connection 小于等于5
    4,retries 大于0
  37. 区块链学习推荐: 先看中本聪那个白皮书, 然后看以太坊协议.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,622评论 18 399
  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 1,367评论 0 2
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,802评论 6 342
  • 一. Java基础部分.................................................
    wy_sure阅读 3,810评论 0 11
  • 今天一个人去看了电影。 去看主要有三个原因,第一,一个人确实有些无聊,加上周六也是一个人呆了一天,所以想着周日应该...
    Michiko七七阅读 278评论 0 0