![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序员
文章平均质量分 78
来一粒感康
这个作者很懒,什么都没留下…
展开
-
救救自己,别再这样写简历了
我作为部门的面试官,收获了不少简历。但可惜的是,收到的简历数量虽多,但令人中意的却是凤毛菱角,一些应聘者倒不是因为自身能力不足而无法进入面试环节,而是简历本身就没有很好的展示出自己的能力,因此与面试的机遇擦肩而过。为了避免类似的「悲剧」反复出现,我打算借着掘金的这次活动,站在面试官的角度,分享一些我在简历制作上的一些心得和建议,希望能帮助到有需求的读者在下次的求职中更加顺利。在下面的篇幅中,我将讲述我最看重简历的三个部分,希望能对各位读者有所启发,这三个部分分别是: 技术能力; 项目转载 2021-12-23 13:26:54 · 90 阅读 · 0 评论 -
Java 最常见的 200+ 面试题:面试必备
面试题这件事,这份面试清单原本是我们公司内部使用的,可到后来有很多朋友在微信上联系到我,让我帮他们找一些面试方面的资料,而且这些关系也不太好拒绝,一呢,是因为这些找我,要面试题的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹们;二呢,我也不能马马虎虎的对付,受人之事忠人之命,我也不能辜负这份信任。慢慢的我产生了一个想法,要不要把我整理的这 200 多道面试题分享出来,来帮助更多需要的人。说实话刚开始的时候还是比较犹豫的,首先我会觉得这么做会不会有点帮人“作弊”的嫌疑,最后我想通了,这是一件值得去做的事儿转载 2021-12-23 12:14:30 · 315 阅读 · 0 评论 -
代码整洁 vs 代码肮脏
写出整洁的代码,是每个程序员的追求。《clean code》指出,要想写出好的代码,首先得知道什么是肮脏代码、什么是整洁代码;然后通过大量的刻意练习,才能真正写出整洁的代码。WTF/min是衡量代码质量的唯一标准,Uncle Bob在书中称糟糕的代码为沼泽(wading),这只突出了我们是糟糕代码的受害者。国内有一个更适合的词汇:屎山,虽然不是很文雅但是更加客观,程序员既是受害者也是加害者。对于什么是整洁的代码,书中给出了大师们的总结: Bjarne Stroustrup:优雅且高效;直截了.转载 2021-12-22 16:31:10 · 98 阅读 · 0 评论 -
在腾讯,我的试用期总结
最近不少小伙伴顺利毕业,入职了新公司,开始了人生第一段正式工作经历。但对于很多公司,如果你想要成为正式员工,是需要先经历几个月的试用期的。记得去年这个时候,我也曾担心过自己会不会遭遇试用期被裁的尴尬局面,但后来发现其实只要你或者公司没有出什么问题,基本都是可以顺利转正的。腾讯的试用期一般是 3 个月,在 1 个月左右就会让你写一份阶段性总结,最后还会要求你填写一份试用期总结报告,有些部门可能还要当面给领导汇报。今天就给大家分享下我的试用期总结,可能会有点官方~不敢说写的很好,但..转载 2021-12-22 15:40:13 · 166 阅读 · 0 评论 -
一次代码评审,差点过不了试用期
沉淀、分享、成长,让自己和他人都能有所收获!????一、前言好的代码往往也很好看代码是给机器运行的,但同样也是给人看的,并且随着上线还需要由人来运维。那么写出可扩展、易维护、好读懂的代码就显得非常重要。对于新人来说,互联网大厂项目开发与平常自己学习的代码还是有很大的差别的。日常学习时候通常只要能运行出结果即可,并不会有其他的要求。也不会说有;PRD评审、研发设计评审、代码开发、代码评审以及中间一些列的提交物,直到测试完成,上线验证,开量对外等等。所以很多新人刚从学校毕业或者从小公司进入转载 2021-12-22 14:58:28 · 326 阅读 · 0 评论 -
我为什么坚持6点起床
因为穷前言 我组织的六点起床俱乐部已经有近两千人,因为不是强制早起打卡,每天坚持打卡的人加起来大概20%左右,这些坚持早起的同学落到他们自己身上就是100% 没有强制打卡因为我觉得打卡不是目的,目的是你要好好的和自己对话,我真的想去提高自己吗?我该怎么样去规划自己的职业生涯,养成学习,并且是持续学习的好习惯 在一群努力学习的小伙伴的感染下,我相信每个人都会有所改变,或多或少而已,因为近朱者赤,近墨者黑多。和自己身边的正能量的同学打交道,长此以往我相信对你总会有好处! 时间的聚合转载 2021-12-22 14:55:05 · 137 阅读 · 0 评论 -
一个思维习惯,让你成为架构师
程序员的迷茫不仅仅是面对技术繁杂的无力感,更重要的是因为长期埋没于软件 世界的浩大的分工体系中,无法看清从业务到软件架构的价值链条,无法清楚定位自 己在分工体系的位置,处理不好自身与技术、业务的关系所致。 很多程序员打心底不喜欢业务,这一点我曾经也经历过,我更宁愿从事框架工 具、技术组件研究的相关事情。我有个朋友经常吐槽我说:”你们天天加班加点写了 那么多代码,然后呢?有改变什么吗?还不是写出了一堆垃圾。”仔细想想很多时候 业务在我们脑海中存留的只是逻辑和流程,我们丢失的是对业务场景的感受,对用 户痛转载 2021-12-22 13:47:05 · 76 阅读 · 0 评论 -
雷军做程序员时写的博客,太牛了。。
这篇文章是在雷总个人博客看到的,里面聊到了他作为程序员的一些经历、初衷以及思考。写的不错,转来给大家看看。如果程序人生的话,这条路太漫长。我并非天生喜欢写程序,上高中时也没有想过程序员的生活。我学电脑非常偶然,小时好友上大学时选择了计算机系,为了和这个朋友有更多的共同语言,我也选择了计算机系,开始步入程序人生的道路。当我学会一些后,发现自己特别喜欢写程序。我是八七年上的武汉大学计算机系,大一下学期才有专业课。当我有资格上机的时候,发现电脑世界太美妙,就一头扎进去。当时用的是 Motoro转载 2021-12-22 13:22:41 · 65 阅读 · 0 评论 -
JUnit:别再用 main 方法测试了,好吗?
01、前世今生你好呀,我是 JUnit,一个开源的 Java 单元测试框架。在了解我之前,先来了解一下什么是单元测试。单元测试,就是针对最小的功能单元编写测试代码。在 Java 中,最小的功能单元就是方法,因此,对 Java 程序员进行单元测试实际上就是对 Java 方法的测试。为什么要进行单元测试呢?因为单元测试可以确保你编写的代码是符合软件需求和遵循开发规范的。单元测试是所有测试中最底层的一类测试,是第一个环节,也是最重要的一个环节,是唯一一次能够达到代码覆盖率 100% 的测试,是整个软件测试转载 2021-12-22 12:57:08 · 354 阅读 · 0 评论 -
ArrayList还是LinkedList?使用不当性能差千倍
ArrayList 和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题。可能大部分小伙伴和我一样,能回答出“ArrayList 是基于数组实现的,LinkedList 是基于双向链表实现的。”关于这一点,我之前的文章里也提到过了。但说实话,这样苍白的回答并不能令面试官感到满意,他还想知道的更多。那假如小伙伴们继续做出下面这样的回答:“ArrayList 在新增和删除元素时,因为涉及到数组复制,所以效率比 LinkedList 低,而在遍历的时候,ArrayList 的效率要高于.转载 2021-12-21 16:00:58 · 164 阅读 · 1 评论 -
垃圾代码书写准则(有意思)
开门见山地说吧,在逛 GitHub 的时候,发现了一个非常有意思的项目,地址如下所示:github.com/trekhleb/st…名叫“垃圾代码书写准则”,瞧这名字,我真的是服了。作者也是良苦用心,从反面教材的角度来阐述正确书写代码格式的重要性。作者使用 JavaScript 编写的代码示例,我把它重制成了 Java 版,并且用我自己的语言风格翻译成了中文,希望小伙伴们能够喜欢。???? 以一种容易造成代码混淆的方式命名变量命名越短,就需要越多的时间去思考代码逻辑等问题。Good转载 2021-12-21 14:45:33 · 122 阅读 · 0 评论 -
如何吃透一个 Java 项目?
先说一下大多数新手的情况:就是对着视频敲 Java 项目,其中遇到的 BUG 还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂,应该怎样才能掌握一个项目所用的知识点呢?先分享一位好朋友丁威的经验吧,他是《RocketMQ技术内幕》一书的作者。他在尝试学习 RocketMQ 之前未曾接触过消息中间件,但硬是通过自己提炼的学习方法,最终成为 RocketMQ 社区的优秀布道师。这让他有了一个非常亮眼的标签,极大提高了职场竞争力。他的总结有以下四点: 了解这个项目转载 2021-12-21 14:13:01 · 210 阅读 · 0 评论 -
为什么阿里巴巴开发手册强制不要在 foreach 里执行删除操作
那天,去阿里面试,面试官一上来就甩给了一道面试题:为什么阿里的 Java 开发手册里会强制不要在 foreach 里进行元素的删除操作?听完就面露喜色,因为两年前,也就是 2021 年,在《Java 程序员进阶之路》看到过这题????。为了镇楼,先搬一段英文来解释一下 fail-fast。In systems design, a fail-fast system is one which immediately reports at its interface any condition that转载 2021-12-21 13:49:24 · 109 阅读 · 0 评论 -
我去,Java IO 也太上头了,,,
1)文件文件流也就是直接操作文件的流,可以细分为字节流(FileInputStream 和 FileOuputStream)和字符流(FileReader 和 FileWriter)。FileInputStream 的例子:int b;FileInputStream fis1 = new FileInputStream("fis.txt");// 循环读取while ((b = fis1.read())!=-1) { System.out.println((char)b...转载 2021-12-21 13:01:46 · 63 阅读 · 0 评论 -
Hutool 工具不糊涂
前言这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战。还在对项目中的工具类和工具方法进行封装吗?让Hutool帮你,它是项目中util包的友好替代,覆盖了Java开发底层的方方面面,既是大型项目中解决小问题的利器,也是小项目中的效率担当,它能让你专注业务,极大地提升开发效率,可以最大程度地避免自行封装出现的小问题、小Bug。所以,学会如何高效、准确地使用项目开发过程中所需的工具方法非常有必要,今天结合使用场景给大家分享一些实用的工具类方法,没讲清楚以...转载 2021-12-19 16:15:25 · 1633 阅读 · 0 评论 -
这可能是你从未见过如此优雅的写法
前言看到这样的标题,第一反应是不是那个“渣渣辉”在电脑屏幕中挥舞着大砍刀,听着古天乐说着,“这是你从未玩过的全新版本”。当然,这并不是标题党,既然“这是你从未玩过的全新版本”,那么“是兄弟就来看我的文章”。(不是兄弟也请留步,嘤嘤嘤)背景在对公司一个几百年没有更新维护旧项目进行功能开发的时候,由于当初开发这个项目的人早已各奔前程,也没有留下什么可视性的文档,所以只能从一些代码以及注释中尽可能地摸索这个项目的系统架构以及对应的业务功能,这无疑是一件十分头疼的事情(看别人的代码和看几个月前自己的代.转载 2021-12-19 15:32:07 · 72 阅读 · 0 评论 -
【建议使用】告别if,Java超好用参数校验工具类
一、前言今天和小伙伴们分享一个常用的工具类,共计四个方法,使用场景比较广泛,有用于校验某个对象或对象中指定属性为空值时,直接返回异常,常用语校验前端请求参数;也有当值不为空时,执行指定动作,可减少大量的if条件,如:mybatis请求参数设置;还有用于判断当值不为空时,替代为新值,完成后续动作。这样描述可能不够清晰,这里花哥列举了几个使用场景,更多的场景需要小伙伴们根据自己业务需求合理使用。//场景一,点击登录时,后端校验用户名if(StringUtils.isEmpty(name)){转载 2021-12-19 15:15:16 · 620 阅读 · 0 评论 -
大厂的 404 页面都长啥样?看到最后一个,我笑了。。。
...转载 2021-12-19 14:59:29 · 58 阅读 · 0 评论 -
细思极恐 - 你真的会写 Java 吗?
导语自2013年毕业后,今年已经是我工作的将近十个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个java程序员,那你真的会写java吗?笔者是一个务实的程序员,故本文绝非扯淡文章,文中内容都是干货,望读者看后,能有所收获。文章核心其实,本不想把标题写的那么恐怖,只是发现很多人干了几年java以后,都自认为是一个不错的java程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做java的同行们,只是希转载 2021-12-17 16:33:51 · 93 阅读 · 0 评论 -
习惯于CRUD,不求上进呢?-为什么有很多程序员沉醉于舒适区
前言近日,渣渣烟有一次十点多下班,然后喊了一辆首汽约车,接着展开了一段很有意思的聊天。我觉得挺有收获的,拿来分享一下!ps:这里说一下,很多人坐专车的时候,都是在那埋头苦摁手机。但是渣渣烟不一样(人丑,所以安全),渣渣烟每次都和专车司机在那闲聊。这是一种和陌生人沟通能力的锻炼,聊到现在基本能和所有专车司机相谈甚欢,比如什么子女教育、城市发展、电影等等,增加自己所见所闻嘛!所以和专车司机闲聊,其实也是一种拓宽自己见识的一种方式。而且,每晚一个专车司机,每个司机就是一本书,慢慢的就看遍人生百态了,有.转载 2021-12-17 14:49:53 · 93 阅读 · 0 评论 -
一个朋友学会Java泛型后直接薪资翻倍
背景对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java 泛型详解、Java中的泛型方法、 java泛型详解一些相关书籍文档我都有整理,可以无偿分享给大家,点击链接进群就可以啦! 5本Java 泛型相关学习书籍 22本Java架构师核心书籍 从0到1Java学习路线和资料 1000+道2021年最新面试题 1. 概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有转载 2021-12-17 14:29:24 · 70 阅读 · 0 评论 -
送你九年经验,我的Java学习之路你也可以复制
这篇文章写的非常认真,足足花了两周时间,不是简单的资料聚合,我将多年的工作和学习经验写下来了,相信看完后你能有一种豁然开朗的感觉,这就是我要达到的目的,希望不要被打脸。最近身边很多人在问:Java 怎么学习啊?有没有什么学习路线?我相信这些人或多或少都有一些 Java 基础,但由于看不到全貌,学了一段时间很容易迷失。所以我在寻思着能不能写一个学习的地图或者路线,让读者能知道下一步该学什么,自己离大厂的 offer还有多远的距离。一个人最怕的不是路途遥远,而是看不到胜利曙光。我希望下面这篇文章能.转载 2021-12-17 14:03:40 · 169 阅读 · 0 评论 -
正则表达式真的很骚,可惜你不会写
本文旨在用最通俗的语言讲述最枯燥的基本知识文章提纲: 元字符 重复限定符 分组 转义 条件或 区间 正则表达式在几乎所有语言中都可以使用,无论是前端的JavaScript、还是后端的Java、c#。他们都提供相应的接口/函数支持正则表达式。但很神奇的是:无论你大学选择哪一门计算机语言,都没有关于正则表达式的课程给你修,在你学会正则之前,你只能看着那些正则大师们,写了一串外星文似的字符串,替代了你用一大篇幅的if else代码来做一些内转载 2021-12-16 17:15:33 · 74 阅读 · 0 评论 -
业务复杂=if else?刚来的大礻申竟燃用策略+工厂彻底干掉了他们
对于业务开发来说,业务逻辑的复杂是必然的,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性。首先可读性,不言而喻,过多的if-else代码和嵌套,会使阅读代码的人很难理解到底是什么意思。尤其是那些没有注释的代码。其次是可维护性,因为if-else特别多,想要新加一个分支的时候,就会很难添加,极其容易影响到其他的分支。笔者曾经看到过一个支付的核心应用,这个应用支持了很多业务的线上转载 2021-12-16 16:55:46 · 108 阅读 · 0 评论 -
学会反射后,我被录取了(甘货)
反射的思想及作用有反必有正,就像世间的阴和阳,计算机的0和1一样。天道有轮回,苍天...(净会在这瞎bibi)在学习反射之前,先来了解正射是什么。我们平常用的最多的new方式实例化对象的方式就是一种正射的体现。假如我需要实例化一个HashMap,代码就会是这样子。Map<Integer, Integer> map = new HashMap<>();map.put(1, 1);某一天发现,该段程序不适合用 HashMap 存储键值对,更倾向于用LinkedH...转载 2021-12-16 16:40:24 · 68 阅读 · 0 评论 -
面试官:说说降级、熔断、限流
当我们的系统的访问量突然剧增,大量的请求涌入过来,最典型的就是秒杀业务了,我们可能会知道会有一波高峰,这时候该如何处理?而且现在很多情况我们还需要调用第三方接口例如支付等,因此我们还得考虑如果第三方那边出问题了,返回异常的慢,我们系统该如何处理。常见的处理方式有三种:降级、熔断、限流。降级降级也就是服务降级,当我们的服务器压力剧增为了保证核心功能的可用性,而选择性的降低一些功能的可用性,或者直接关闭该功能。这就是典型的丢车保帅了。 就比如贴吧类型的网站,当服务器吃不消的时候,可以选择把.转载 2021-12-16 16:28:10 · 488 阅读 · 0 评论 -
看看阿里程序员是怎样讲限流的
有读者说自己准备的项目是秒杀系统,他在 Redis 和 MySQL 的设计上准备了很多,但是每次面试偏偏面试官先问他怎么限流。限流他又没准备,回答的很不条理,刚面试开始自己就慌了。其实在实际的秒杀系统中,限流是特别重要的,所以面试官也特别注意这方面的问题。今天看到一篇很系统的讲解限流的文章,一起来学习下。为什么要限流日常生活中,有哪些需要限流的地方?像我旁边有一个国家景区,平时可能根本没什么人前往,但是一到五一或者春节就人满为患,这时候景区管理人员就会实行一系列的政策来限制进入人流量, 为什转载 2021-12-16 16:22:03 · 124 阅读 · 0 评论 -
你觉得我的这段Java代码还有优化的空间吗?
上周,因为要测试一个方法的在并发场景下的结果是不是符合预期,我写了一段单元测试的代码。写完之后截了个图发了一个朋友圈,很多人表示短短的几行代码,涉及到好几个知识点。还有人给出了一些优化的建议。那么,这是怎样的一段代码呢?涉及到哪些知识,又有哪些可以优化的点呢?让我们来看一下。背景先说一下背景,也就是要知道我们单元测试要测的这个方法具体是什么样的功能。我们要测试的服务是AssetService,被测试的方法是update方法。update方法主要做两件事,第一个是更新Asset、第二个是插转载 2021-12-15 16:40:40 · 67 阅读 · 0 评论 -
处理Java异常的10个最嘉实践
线上代码不要使用printStackTrace()写完代码后请一定要检查下,代码中千万不要有printStackTrace()。因为printStackTrace()只会在控制台上输出错误的堆栈信息,他只适合于用来代码调试。真正需要记录异常,请使用日志记录。永远不要在catch块中吞掉异常catch (NoSuchMethodException e) { return null;}永远不要不处理异常,而是返回null,这样异常就会被吞掉,无法获取到任何失败信息,会给日后的问题.转载 2021-12-15 16:25:17 · 53 阅读 · 0 评论 -
自定义注解,绝对是程序员装逼的利器
相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override、@Autowired、@Service等,这些都是JDK或者诸如Spring这类框架给我们提供的。在以往的面试过程中,我发现,关于注解的知识很多程序员都仅仅停留在使用的层面上,很少有人知道注解是如何实现的,更别提使用自定义注解来解决实际问题了。但是其实,我觉得一个好的程序员的标准就是懂得如何优化自己的代码,那在代码优化上面,如何精简代码,去掉重复代码就是一个至关重要的话题,在这个话题领域,自定义注解绝对可以算得上是一转载 2021-12-15 16:18:16 · 300 阅读 · 0 评论 -
为什么阿里巴巴强制要求使用包装类型定义属性?
在阿里巴巴Java开发手册中,对于POJO中如何选择变量的类型也有着一些规定:这里强制要求使用包装类型,原因是什么呢?我们来看一段简单的代码/** * @author Hollis */public class BooleanMainTest { public static void main(String[] args) { Model model1 = new Model(); System.out.println("default model...转载 2021-12-15 12:35:05 · 141 阅读 · 0 评论 -
在Java中,负数的绝对值竟燃不一定是正数。
绝对值是指一个数在数轴上所对应点到原点的距离,所以,在数学领域,正数的绝对值是这个数本身,负数的绝对值应该是他的相反数。这几乎是每个人都知道的。在Java中,想要获得有个数字的绝对值,可以使用java.lang.Math中的abs方法,这个类共有4个重载的abs方法,分别是:public static int abs(int a) { return (a < 0) ? -a : a;}public static long abs(long a) { return (转载 2021-12-14 15:25:55 · 351 阅读 · 0 评论 -
小知识|Java中的“魔数“
在编程过程中,我们可能经常听到“魔数”这个词,那么这个词到底指的是什么呢?什么数叫做魔数呢?一、标识文件类型的“魔数”大多数情况下,我们都是通过扩展名来识别一个文件的类型的,比如我们看到一个.txt类型的文件我们就知道他是一个纯文本文件。但是,扩展名是可以修改的,那一旦一个文件的扩展名被修改过,那么怎么识别一个文件的类型呢。这就用到了我们提到的“魔数”。很多类型的文件,其起始的几个字节的内容是固定的(或是有意填充,或是本就如此)。因此这几个字节的内容也被称为魔数 (magic numbe.转载 2021-12-14 15:19:11 · 361 阅读 · 0 评论 -
使用Java8改造出来的模板方法真的是yyds
我们在日常开发中,经常会遇到类似的场景:当要做一件事儿的时候,这件事儿的步骤是固定好的,但是每一个步骤的具体实现方式是不一定的。通常,遇到这种情况,我们会把所有要做的事儿抽象到一个抽象类中,并在该类中定义一个模板方法。这就是所谓的模板方法模式。以前的模板方法在我之前的一篇《设计模式——模板方法设计模式》文章中举过一个例子:当我们去银行的营业厅办理业务需要以下步骤:1.取号、2.办业务、3.评价。三个步骤中取号和评价都是固定的流程,每个人要做的事儿都是一样的。但是办业务这个步骤根据每个人要转载 2021-12-14 15:08:14 · 90 阅读 · 0 评论 -
千万不要再这样创建集合了,极容易内存泄露。
由于Java语言的集合框架中(collections, 如list, map, set等)没有提供任何简便的语法结构,这使得在建立常量集合时的工作非常繁索。每次建立时我们都要做:1、定义一个空的集合类变量 2、向这个结合类中逐一添加元素 3、将集合做为参数传递给方法例如,要将一个Set变量传给一个方法:Map<String,String> users = new HashMap<>() {{ put("Hollis","Hollis"); put("ho...转载 2021-12-14 13:36:41 · 97 阅读 · 0 评论 -
面试官疯了,问我为什么浮点数不精确?
很多人都知道,Java 中的浮点数并不精确,需要用 BigDecimal进行精确计算,但是,很少有人知道为什么浮点数不精确呢?不精确为什么还要用呢?本文就来展开分析一波;我们知道,计算机的数字的存储和运算都是通过二进制进行的,对于,十进制整数转换为二进制整数采用”除2取余,逆序排列”法具体做法是:用2整除十进制整数,可以得到一个商和余数; 再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止 然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次转载 2021-12-13 16:25:34 · 57 阅读 · 0 评论 -
单例与序列化的那些事儿
本文将通过实例+阅读Java源码的方式介绍序列化是如何破坏单例模式的,以及如何避免序列化对单例的破坏。单例模式,是设计模式中最简单的一种。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。关于单例模式的使用方式,可以阅读单例模式的七种写法但是,单例模式真的能够实现实例的唯一性吗?答案是否定的,很多人都知道使用反射可以破坏单例模式,除了反射以外,使用序列化与反序列化也.转载 2021-12-13 15:51:57 · 62 阅读 · 0 评论 -
乐观锁的一种实现方式——CAS
线程安全众所周知,Java是多线程的。但是,Java对多线程的支持其实是一把双刃剑。一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题。线程安全性可能是非常复杂的,在没有充足的同步的情况下,多个线程中的操作执行顺序是不可预测的。Java里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点有两个:可见性和有序性。加上复合操作的原子性,我们可以认为Java的线程安全性问题主要关注点有3个:可见性、有序性和原子性。Java内存模型(JMM)解决了可见性和有序性的问题转载 2021-12-13 15:50:13 · 336 阅读 · 0 评论 -
不使用synchronized和lock,如何实现一个线程安全的单例?(二)
如果不那么吹毛求疵的话,可以使用枚举、静态内部类以及饿汉模式来实现单例模式。见:不使用synchronized和lock,如何实现一个线程安全的单例?但是,上面这几种方法其实底层也都用到了synchronized,那么有没有什么办法可以不使用synchronized和lock,如何实现一个线程安全的单例?答案是有的,那就是CAS。关于CAS,我博客中专门有一篇文章介绍过他,很多乐观锁都是基于CAS实现的。这里简单介绍一下,详细内容见乐观锁的一种实现方式——CASCAS是项乐观锁技术,当多个线.转载 2021-12-13 15:49:06 · 123 阅读 · 0 评论 -
不使用synchronized和lock,如何实现一个线程安全的单例?
枚举public enum Singleton { INSTANCE; public void whateverMethod() { } } 静态内部类public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } pri转载 2021-12-13 15:47:45 · 209 阅读 · 0 评论