Java面试官最爱问的volatile关键字

原创

Java面试官最爱问的volatile关键字

在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题。经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用volatile关键字作为切入点呢?

为什么爱问volatile关键字

爱问volatile关键字的面试官,大多数情况下都是有一定功底的,因为volatile作为切入点,往底层走可以切入Java内存模型(JMM),往并发方向走又可接切入Java并发编程,当然,再深入追究,JVM的底层操作、字节码的操作、单例都可以牵扯出来。

所以说懂的人提问题都是有门道的。那么,先整体来看看volatile关键字都设计到哪些点:内存可见性(JMM特性)、原子性(JMM特性)、禁止指令重排、线程并发、与synchronized的区别……再往深层次挖,可能就涉及到字节码、JVM等。

不过值得庆幸的是,如果你已经学习了微信公众号“程序新视界”JVM系列的文章,上面的知识点已经不是什么问题了,权当是复习了。那么,下面就以面试官提问的形式,在不看答案的情况下,尝试回答,看看学习效果如何。夺命连环问,开始……

面试官:说说volatile关键字的特性

被volatile修饰的共享变量,就具有了以下两点特性:

  • 保证了不同线程对该变量操作的内存可见性;
  • 禁止指令重排序;

回答的很好,点出了volatile关键字两大特性。针对该两大特性继续深入。

面试官:什么是内存可见性?能否举例说明?

该问题涉及到Java内存模型(JVM)和它的内存可见性特性,这里将前面系列《Java内存模型(JMM)详解》和《Java内存模型相关原则详解》中的部分内容整理出来回答。

先说内存模型:Java虚拟机规范试图定义一种Java内存模型(JMM),来屏蔽掉各种硬件和操作系统的内存访问差异,让Java程序在各种平台上都能达到一致的内存访问效果

Java面试官最爱问的volatile关键字_第1张图片

Java内存模型是通过变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值,将主内存作为传递媒介。可举例说明内存可见性的过程。

Java面试官最爱问的volatile关键字_第2张图片

本地内存A和B有主内存中共享变量x的副本,初始值都为0。线程A执行之后把x更新为1,存放在本地内存A中。当线程A和线程B需要通信时,线程A首先会把本地内存中x=1值刷新到主内存中,主内存中的x值变为1。随后,线程B到主内存中去读取更新后的x值,线程B的本地内存的x值也变为了1。

最后再说可见性:可见性是指当一个线程修改了共享变量的值,其他线程能够立即得知这个修改

无论普通变量还是volatile变量都是如此,只不过volatile变量保证新值能够立马同步到主内存,使用时也立即从主内存刷新,保证了多线程操作时变量的可见性。而普通变量不能够保证。

面试官:提到JMM和可见性,能说说JMM的其他特性吗

我们知道JMM除了可见性,还有原子性和有序性。

原子性即一个操作或一系列是不可中断的。即使是在多个线程的情况下,操作一旦开始,就不会被其他线程干扰。

比如,对于一个静态变量int x两条线程同时对其赋值,线程A赋值为1,而线程B赋值为2,不管线程如何运行,最终x的值要么是1,要么是2,线程A和线程B间的操作是没有干扰的,这就是原子性操作,不可被中断的。

在Java内存模型中有序性可归纳为这样一句话:如果在本线程内观察,所有操作都是有序的,如果在一个线程中观察另一个线程,所有操作都是无序的。

有序性是指对于单线程的执行代码,执行是按顺序依次进行的。但在多线程环境中,则可能出现乱序现象,因为在编译过程会出现“指令重排”,重排后的指令与原指令的顺序未必一致。

因此,上面归纳的前半句指的是线程内保证串行语义执行,后半句则指指“令重排现”象和“工作内存与主内存同步延迟”现象。

面试官:你多次提到指令重排,能举例说明吗?

CPU和编译器为了提升程序执行的效率,会按照一定的规则允许进行指令优化。但代码逻辑之间是存在一定的先后顺序,并发执行时按照不同的执行逻辑会得到不同的结果。

举个例说明多线程中可能出现的重排现象:

class ReOrderDemo {
    int a = 0;
    boolean flag = false;
public void write() {
    a = 1;                   //1
    flag = true;             //2
}
 
public void read() {
    if (flag) {                //3
        int i =  a * a;        //4
        ……
    }
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在上面的代码中,单线程执行时,read方法能够获得flag的值进行判断,获得预期结果。但在多线程的情况下就可能出现不同的结果。比如,当线程A进行write操作时,由于指令重排,write方法中的代码执行顺序可能会变成下面这样:

flag = true;             //2
a = 1;                   //1

   
   
   
   
  • 1
  • 2

也就是说可能会先对flag赋值,然后再对a赋值。这在单线程中并不影响最终输出的结果。

但如果与此同时,B线程在调用read方法,那么就有可能出现flag为true但a还是0,这时进入第4步操作的结果就为0,而不是预期的1了。

而volatile关键词修饰的变量,会禁止指令重排的操作,从而在一定程度上避免了多线程中的问题。

面试官:volatile能保证原子性吗?

volatile保证了可见性和有序性(禁止指令重排),那么能否保证原子性呢?

volatile不能保证原子性,它只是对单个volatile变量的读/写具有原子性,但是对于类似i 这样的复合操作就无法保证了。

如下代码,从直观上来讲,感觉输出结果为10000,但实际上并不能保证,就是因为inc 操作属于复合操作。

public class Test {
    public volatile int inc = 0;
public void increase() {
    inc  ;
}

public static void main(String[] args) {
    final Test test = new Test();
    for(int i=0;i<10;i  ){
        new Thread(){
            public void run() {
                for(int j=0;j<1000;j  )
                    test.increase();
            };
        }.start();
    }

    while(Thread.activeCount()>1)  //保证前面的线程都执行完
        Thread.yield();
    System.out.println(test.inc);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

假设线程A,读取了inc的值为10,然被阻塞,因未对变量进行修改,未触发volatile规则。线程B此时也读取inc的值,主存里inc的值依旧为10,做自增,然后立刻写回主存,值为11。此时线程A执行,由于工作内存里保存的是10,所以继续做自增,再写回主存,11又被写了一遍。所以虽然两个线程执行了两次increase(),结果却只加了一次。

有人说,volatile不是会使缓存行无效的吗?但是这里线程A读取之后并没有修改inc值,线程B读取时依旧是10。又有人说,线程B将11写回主存,不会把线程A的缓存行设为无效吗?只有在做读取操作时,发现自己缓存行无效,才会去读主存的值,而线程A的读取操作在线程B写入之前已经做过了,所以这里线程A只能继续做自增了。

针对这种情况,只能使用synchronized、Lock或并发包下的atomic的原子操作类。

面试官:刚提到synchronized,能说说它们之间的区别吗

  • volatile本质是在告诉JVM当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
  • volatile仅能使用在变量级别;synchronized则可以使用在变量、方法和类级别的;
  • volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性;
  • volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
  • volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化。

面试官:还能举出其他例子说明volatile的作用吗

可举单例模式的实现,典型的双重检查锁定(DCL):

class Singleton{
    private volatile static Singleton instance = null;
private Singleton() {}

public static Singleton getInstance() {
    if(instance==null) { // 1
        synchronized (Singleton.class) {
            if(instance==null)
                instance = new Singleton(); // 2
        }
    }
    return instance;
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

这是一种懒汉的单例模式,使用时才创建对象,而且为了避免初始化操作的指令重排序,给instance加上了volatile。

为什么用了synchronized还要用volatile?具体来说就是synchronized虽然保证了原子性,但却没有保证指令重排序的正确性,会出现A线程执行初始化,但可能因为构造函数里面的操作太多了,所以A线程的instance实例还没有造出来,但已经被赋值了(即代码中2操作,先分配内存空间后构建对象)。

而B线程这时过来了(代码1操作,发现instance不为null),错以为instance已经被实例化出来,一用才发现instance尚未被初始化。要知道我们的线程虽然可以保证原子性,但程序可能是在多核CPU上执行。

小结

当然,针对volatile关键字还有其他方面的拓展,比如讲到JMM时可拓展到JMM与Java内存模型的区别,讲到原子性时可扩展到如何查看class字节码,讲到并发可扩展到线程并发的方法面面。

其实,不仅面试如此,在学习知识时也可以参考这种面试思维,多问几个为什么。将一个点,通过为什么拓展成一个知识网。

原文链接:《Java面试官最爱问的volatile关键字》

《面试官》系列文章:

  • 《JVM之内存结构详解》
  • 《面试官,不要再问我“Java GC垃圾回收机制”了》
  • 《面试官,Java8 JVM内存结构变了,永久代到元空间》
  • 《面试官,不要再问我“Java 垃圾收集器”了》
  • 《Java虚拟机类加载器及双亲委派机制》
  • 《Java内存模型(JMM)详解》
  • 《Java内存模型相关原则详解》
  • 《Java面试官最爱问的volatile关键字》

程序新视界

关注程序员的职场生涯,大量优质学习资源、技术文章分享

程序新视界-微信公众号

                                
文章最后发布于: 2019-11-08 10:49:37
        
展开阅读全文
0 个人打赏
发表评论
还能输入1000个字符

大家多多支持~举报回复

  • zhaozihao594
    zhaozihao594 10小时前 #4楼 666 举报回复查看回复(1)
    • wo541075754
      二师兄-公众号-程序新视界 回复 zhaozihao594 9小时前 表情包 举报回复
  • weixin_42613992
    weixin_42613992 13小时前 #3楼 厉害 举报回复查看回复(1)
    • wo541075754
      二师兄-公众号-程序新视界 回复 weixin_42613992 12小时前 表情包 举报回复
  • qq_40162735
    破茧重生Lys 13小时前 #2楼 向大佬看齐。写的非常棒 举报回复查看回复(1)
    • wo541075754
      二师兄-公众号-程序新视界 回复 破茧重生Lys 12小时前 表情包 举报回复
  • qq_34666857
    李子树_ 1天前 #1楼 写的这么好,居然没人评论 举报回复查看回复(3)
    • wo541075754
      二师兄-公众号-程序新视界 回复 李子树_ 1天前
      这个我也发现了,周末的访问量几乎只有平时的一半不到~
      举报回复
    • qq_34666857
      李子树_ 回复 二师兄-公众号-程序新视界 1天前
      首先csdn的推荐机制有问题,好多篇被推荐到首页的文章他不推送,,
      还有就是发现一个规律,以后发文尽量别周五晚上或者周末发,看的人太少了
      举报回复
    • wo541075754
      二师兄-公众号-程序新视界 回复 李子树_ 1天前 我也说呢 举报回复

  • 上一页
  • 1
  • 下一页




面试官最爱volatile关键字

03-03 阅读数 48

面试官最爱的volatile关键字在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模型(J... 博文 来自: SH_ITGirl的博客

精选(24)面试官最爱volatile关键字

05-03 阅读数 1万+

在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模型(JMM),Java并发编程的一些特性... 博文 来自: cowbin2012的专栏

谈谈面试官最爱volatile关键字

10-04 阅读数 73

谈谈面试官最爱的volatile关键字谈谈面试官最爱的volatile关键字 在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以volatile关键字作为一个小的切入... 博文 来自: 电脑,网络,精彩网摘收藏

程序员真是太太太太太有趣了!!!

08-31 阅读数 4万+

网络上虽然已经有了很多关于程序员的话题,但大部分人对这个群体还是很陌生。我们在谈论程序员的时候,究竟该聊些什么呢?各位程序员大佬们,请让我听到你们的声音!不管你是前端开发...... 博文 来自: 程序猿DD

史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)

10-29 阅读数 2万+

网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时候你可能思路全无~中招了咩~,还有一些同学依旧在使用ec... 博文 来自: 程序员宜春的博客

史上最全的后端技术大全,你都了解哪些技术呢?

09-03 阅读数 1万+

|导语工欲善其事,必先利其器;士欲宣其义,必先读其书。后台开发作为互联网技术领域的掌上明珠,一直都是开发者们的追逐的高峰。本文将从后台开发所涉及到的技术术语出发,基于...... 博文 来自: easylife206的专栏

吃人的那些 Java 名词:对象、引用、堆、栈

09-05 阅读数 1万+

作为一个有着8年Java编程经验的IT老兵,说起来很惭愧,我被Java当中的四五个名词一直困扰着:**对象、引用、堆、栈、堆栈**(栈可同堆栈,因此是四个名词,也是五个名词)。每次我看到这几个名词,都... 博文 来自: 沉默王二

我花了一夜用数据结构给女朋友写个H5走迷宫游戏

09-21 阅读数 13万+

起因又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而怨气满满!而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有... 博文 来自: bigsai

团队中的 Git 实践

09-12 阅读数 2496

在2005年的某一天,Linux之父LinusTorvalds发布了他的又一个里程碑作品——Git。它的出现改变了软件开发流程,大大地提高了开发流畅度!直到现...... 博文 来自: Docker的专栏

Java面试官最爱volatile关键字 - 刘成 - CSDN博客

11-9

Java 面试官最喜欢关键字 volatile - java580的博客 - CSDN博客

3-20

不识 Pandas,纵是老手也枉然?

09-13 阅读数 2518

作者|周志鹏责编|郭芮这段时间和一些做数据分析的同学闲聊,我发现数据分析技能入门阶段存在一个普遍性的问题,很多凭着兴趣入坑的同学,都能够很快熟悉Python基础语法,然后不约而同的一头扎进《利用Pyt... 博文 来自: CSDN资讯

		
香草天空Sky关注
香草天空Sky

247篇文章

排名:千里之外

SH_ITGirl关注
SH_ITGirl

5篇文章

排名:千里之外

大神,快来碗里关注
大神,快来碗里

601篇文章

排名:67

zzf1860关注
zzf1860

18篇文章

排名:千里之外

接班马云的为何是张勇?

09-14 阅读数 3万+

上海人、职业经理人、CFO背景,集齐马云三大不喜欢的张勇怎么就成了阿里接班人?作者|王琳本文经授权转载自燃财经(ID:rancaijing)9月10日,张勇转正了,他由阿里巴巴董事局候任主席正式成为阿... 博文 来自: CSDN资讯

程序员终极面试指南!

09-14 阅读数 1879

身为技术人,如何拿下自己心仪的offer?作者|JamesBedford译者|苏本如,责编|屠敏出品|CSDN(ID:CSDNnews)以下为译文:介绍最近半年以来,我一直在积极指导开发人员,包括新手... 博文 来自: CSDN资讯

面试官最爱的并发题 - java面试笔试 - CSDN博客

10-13

面试官最爱volatile关键字 - CSDN博客

9-12

我在快手认识了 4 位工程师,看到了快速发展的公司和员工如何彼此成就!

09-16 阅读数 2万+

作者|胡巍巍出品|CSDN(ID:CSDNnews)从西二旗地铁站B口出来,步行700多米可以看到一个工业建筑风格的院子。这个独立的院子和后厂村各大互联网公司的高楼林立有些不同。院子里有7栋6层高的楼... 博文 来自: CSDN资讯

让程序员崩溃的瞬间(非程序员勿入)

09-16 阅读数 19万+

今天给大家带来点快乐,程序员才能看懂。来源:https://zhuanlan.zhihu.com/p/470665211.公司实习生找Bug2.在调试时,将断点设置在错误的位置3.当我有一个很棒的调试... 博文 来自: strongerHuang

面试官最爱volatile关键字 - IT哈哈的博客 - CSDN博客

9-26

java面试 关键字 - weixin_30677475的博客 - CSDN博客

10-5

分享一个 pycharm 专业版的永久使用方法

09-19 阅读数 5159

刚开始接触Python,首先要解决的就是Python开发环境的搭建。目前比较好用的Python开发工具是PyCharm,他有社区办和专业版两个版本,但是社区版支持有限,我们既然想好好学python,那... 博文 来自: Python专栏

用Python分析2000款避孕套,得出这些有趣的结论

09-18 阅读数 3万+

到现在为止,我们的淘宝教程已经写到了第四篇,前三篇分别是:第一篇:Python模拟登录淘宝,详细讲解如何使用requests库登录淘宝pc端。第二篇:淘宝自动登录2.0,新增Cookies序列化,教大... 博文 来自: 猪哥

【面试】volatile有什么用? --Java基础知识 - fcvtb的..._CSDN博客

10-25

无需安装,仅需 1 条指令,秒实现内网穿透的神器,你有用过吗?

09-17 阅读数 2018

什么是ServeoServeo是一个免费的内网穿透服务,Serveo可以将本地计算机暴露在互联网上,官方声称其为Ngrok的绝佳替代品。Serveo其最大优点...... 博文 来自: easylife206的专栏

作为曾经的 Web 开发“王者”,jQuery 的传奇怎么续写?

09-20 阅读数 787

作为世界上使用最广泛的JavaScript库,jQuery曾经帮助过一代开发人员创建了适用于每种浏览器的网站,可以说,Web开发之所以能有今天,jQuery可谓功不可没。但是随着新的库、框架和范例的不... 博文 来自: CSDN资讯

重磅:硬核前端面试开源项目汇总(进大厂必备)

09-24 阅读数 923

复习前端面试的知识,是为了巩固前端的基础知识,最重要的还是平时的积累!”开源项目https://github.com/InterviewMap/CS-Interview...... 博文 来自: 全栈修炼

为什么平头哥做芯片如此迅猛?

09-26 阅读数 9453

作者|胡巍巍发自杭州云栖大会责编|唐小引出品|CSDN(ID:CSDNnews)2018年10月31日,阿里旗下的平头哥半导体有限公司成立。如今,平头哥成立...... 博文 来自: CSDN资讯

对计算机专业来说学历真的重要吗?

09-27 阅读数 6万+

我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记... 博文 来自: 启舰

技术人员要拿百万年薪,必须要经历这9个段位

08-24 阅读数 1万+

很多人都问,技术人员如何成长,每个阶段又是怎样的,如何才能走出当前的迷茫,实现自我的突破。所以我结合我自己10多年的从业经验,总结了技术人员成长的9个段位,希望对大家的职...... 博文 来自: Python之禅的专栏

多线程编程是后台开发人员的基本功

09-29 阅读数 5927

这里先给大家分享一个小故事:在我刚开始参加工作的那年,公司安排我开发一款即时通讯软件(IM,类似于QQ聊天软件),在这之前我心里也知道如果多线程操作一个整型值是要加锁...... 博文 来自: CSDN资讯

Java 网络爬虫,就是这么的简单

10-08 阅读数 1万+

这是Java网络爬虫系列文章的第一篇,如果你还不知道Java网络爬虫系列文章,请参看学Java网络爬虫,需要哪些基础知识。第一篇是关于Java网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻的新闻标题... 博文 来自: 平头哥的技术博文

500行代码,教你用python写个微信飞机大战

10-16 阅读数 4万+

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手/右手有节... 博文 来自: Python专栏

2019诺贝尔经济学奖得主:贫穷的本质是什么?

10-15 阅读数 6950

2019年诺贝尔经济学奖,颁给了来自麻省理工学院的阿巴希·巴纳吉(AbhijitVinayakBanerjee)、艾丝特·杜芙若(EstherDuflo)夫妇和哈...... 博文 来自: 微信公众号:猴子聊人物

redis——相关题汇总

10-16 阅读数 1万+

什么是redis?Redis本质上是一个Key-Value类型的内存数据库,整个数据库加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能... 博文 来自: hebtu666

【JS 口袋书】第 6 章:JS 对象生命周期的秘密

10-16 阅读数 403

作者:valentinogagliardi来源:github译者:前端小智阿里云最近在做活动,低至2折,有兴趣可以看看:https://promotion.aliyun.com/ntms/yunpar... 博文 来自: 前端小智

别在学习框架了,那些让你起飞的计算机基础知识。

10-22 阅读数 4万+

我之前里的文章,写的大部分都是与计算机基础知识相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的。框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,... 博文 来自: 帅地

程序员必须掌握的核心算法有哪些?

10-21 阅读数 6万+

由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,... 博文 来自: 帅地

SQL基本语法入门 看这里就够了

10-21 阅读数 1313

SQL执行顺序第一步:执行FROM第二步:WHERE条件过滤第三步:GROUPBY分组第四步:执行SELECT投影列第五步:HAVING条件过滤第六步:执行ORDERBY排序一、创建、删除库--创建新... 博文 来自: Mr_Fei的博客

高并发技术

10-24 阅读数 8749

高并发技术第一章预备知识一理解大数据二网工基础知识OSI七层参考模型应用层表示层会话层传输层网络层链路层物理层功能分层总结第二章LVS技术一LVS介绍二LVS调度算法LVS命令监控多个端口号管理服务集... 博文 来自: 时间静止

python 程序员进阶之路:从新手到高手的100个模块

10-23 阅读数 3万+

在知乎和CSDN的圈子里,经常看到、听到一些python初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python学到... 博文 来自: 牧码人

Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)

10-22 阅读数 2万+

最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成)one樱花树动态生成樱花效果图... 博文 来自: 碎片

程序员不懂浪漫?胡扯!

10-22 阅读数 1万+

程序员男朋友你的程序员男朋友为你做过什么暖心的事情呢?我的男朋友是一个程序员,他有很多大家在网络上吐槽的程序员的缺点,比如加班很多,没空陪我吃饭逛街看电影,比如说他有的时...... 博文 来自: CSDN资讯

程序员成长的四个简单技巧,你 get 了吗?

10-23 阅读数 1万+

最近拜读了“阿里工程师的自我修养”手册,12位技术专家分享生涯感悟来帮助我们这些菜鸡更好的成长,度过中年危机,我收获颇多,其中有不少的方法技巧和我正在使用的,这让我觉得我做的这些事情是对的,我走在了一... 博文 来自: 平头哥的技术博文

给 python 初学者的四条忠告

10-23 阅读数 9667

学习一种编程语言,首先要找一款合用的集成开发工具,似乎是自然而然的想法。为什么不呢?IDE可以自动补齐,可以一键运行,还可以断点调试。使用IDE开发项目,就像驾驶一辆内饰豪华的汽车,尽情享受驾驶的乐趣... 博文 来自: 牧码人

C++控制台打飞机小游戏

10-24 阅读数 5027

文章目录前言介绍前言我终于决定还是把这个放出来。这是我在纪中颓废的时候写的。介绍先来视频:具体信息主界面上都有写。按空格暂停,建议暂停后再升级属性。记录最高分的文件进行了加密。有boss。挺好玩的。可... 博文 来自: ixRic

Python自动化完成tb喵币任务

10-25 阅读数 1万+

2019双十一,tb推出了新的活动,商店喵币,看了一下每天都有几个任务来领取喵币,从而升级店铺赚钱,然而我既想赚红包又不想干苦力,遂使用python来进行手机自动化操作,目测全网首发!用到的库:reo... 博文 来自: liu_bingzhe

2019年9月全国程序员工资统计

09-05 阅读数 2万+

2019年9月2日,统计了某招聘网站上的所有程序员招聘信息。并汇总如下。 博文

Spring Cloud(11)——基于RocketMQ的Stream实现

09-20 阅读数 1526

基于RocketMQ的Stream实现 Spring Cloud Stream是一个消息收发的框架,它提供了一套标准,应用程序只需要按照它的标准进行消息的收发,而不用关注具体的实现机制。具体的实现可以... 博文

Java 13 新特性全面解读

09-21 阅读数 1241

作者 l Hollis

本文经授权转载自Hollis(ID:hollischuang)

2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每…


博文



分享靠写代码赚钱的一些门路

09-26 阅读数 4万+

作者 mezod,译者 josephchang10如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。今天给大家分享一个精彩...... 博文

面试官:兄弟,说说基本类型和包装类型的区别吧

09-29 阅读数 3万+

Java 的每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。基本类型和包装类型的区别主要有以下 4 点。... 博文

进程和线程的区别(超详细)

10-03 阅读数 2179

进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。

线程
进程中的一个执行任务…


博文



动画:用动画给面试官解释 TCP 三次握手过程

10-12 阅读数 2万+

作者 | 小鹿 来源 | 公众号:小鹿动画学编程

写在前边
TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐。
对于…


博文



为什么程序员在学习编程的时候什么都记不住?

10-12 阅读数 2万+

在程序员的职业生涯中,记住所有你接触过的代码是一件不可能的事情!那么我们该如何解决这一问题?作者 |Dylan Mestyanek译者 | 弯月,责编 | 屠敏出品 |...... 博文

唐僧团队要裁员,你会裁谁?

10-15 阅读数 3万+

提问:

西游记取经团为了节约成本,唐太宗需要在这个团队里裁掉一名队员,该裁掉哪一位呢,为什么?

为了完成西天取经任务,组成取经团队,成员有唐僧、孙悟空、猪八戒、沙和尚、白龙马。
高层领导: 观音…


博文



linux:最常见的linux命令(centOS 7.6)

10-16 阅读数 8669

最常见,最频繁使用的20个基础命令如下: 皮一下,这都是干货偶,大佬轻喷 一、linux关机命令: 1.shutdown命令安全地将系统关机(推荐)参数说明: [-r] 重启计算器。 [-h] 关机后... 博文

只因写了一段爬虫,公司200多人被抓!

10-16 阅读数 9万+

“一个程序员写了个爬虫程序,整个公司200多人被端了。”

“不可能吧!”

刚从朋友听到这个消息的时候,我有点不太相信,做为一名程序员来讲,谁还没有写过几段爬虫呢?只因写爬虫程序就被端有点夸张了吧。…


博文



MySQL数据库—SQL汇总

10-24 阅读数 8808

一、准备 下文整理常见SQL语句的用法,使用MySQL5.7测试,参考了尚硅谷MySQL教程及用例。用例sql: 链接: https://pan.baidu.com/s/1tb3-12MRNFjV8d... 博文

五款高效率黑科技神器工具,炸裂好用,省时间

10-20 阅读数 1万+

loonggg读完需要4分钟速读仅需2分钟感觉我好久好久没有给大家分享高质量的软件和插件了。今天周末,难得在家休息一下,痛下决心,分享一些我认为的高效率工具软件给大家。废...... 博文

动画:用动画给女朋友讲解 TCP 四次分手过程

10-21 阅读数 2万+

作者 | 小鹿 来源 | 公众号:小鹿动画学编程

写在前边
大家好,我们又见面了,做为一个业余的动画师,上次的用动画的形式讲解 TCP 三次握手过程再各大平台收到了广大读者的喜爱,说文章有趣、有…


博文



Java 8:一文掌握 Lambda 表达式

10-23 阅读数 1万+

本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lambda 表达式的原理进行分析,最后对 Lambda 表达式的优缺点进行一个总... 博文

Python中几个非常有趣的模块

10-24 阅读数 1万+

最近学习Python,发现了许多有趣的模块。感觉开启了新世界的大门,因为我也不是对所有模块都熟悉,所以今天不是讲代码。 1、ItChat 这是一个微信自动回复的模块,因为我微信一直无法登陆,所以也没有... 博文

Linux/C/C++ 不可错过的好书

10-24 阅读数 4161

来源:公众号【编程珠玑】

作者:守望先生

ID:shouwangxiansheng

前言

经常有读者让我推荐书籍,这次我就把我私藏的计算机书单分享给你们!不过由于时间匆忙,不会进行更加详细…


博文



从月薪3K的中专生,到身家千万的CTO!人生最大的对手,就是自已

10-25 阅读数 1万+

关注“技术领导力”博客,独家大厂干货推送

文/Daniel.W

David坐在我对面,窗外是梦境般的外滩夜景,繁星点点的璀璨灯火,散落在黄浦江两岸。我转过头对David说,你丫挺会享受啊,约我…


博文



这应该是把计算机网络五层模型讲的最好是文章了,看不懂你打我

10-25 阅读数 1万+

帅地:用心写好每一篇文章!

前言
天各一方的两台计算机是如何通信的呢?在成千上万的计算机中,为什么一台计算机能够准确着寻找到另外一台计算机,并且把数据发送给它呢?
可能很多人都听说过网络通信的 5 …


博文



单点登录(SSO)

10-26 阅读数 1万+

一、SSO(单点登录)介绍

SSO英文全称Single SignOn,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用…


博文



漫话:什么是 https ?这应该是全网把 https 讲的最好的一篇文章了

10-26 阅读数 1万+

今天这篇文章,讲通过对话的形式,让你由浅入深着知道,为什么 Https 是安全的。

一、对称加密

一禅:在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客…


博文



史上最全的mysql基础教程

10-28 阅读数 3673

启动与停止

启动mysql服务
sudo /usr/local/mysql/support-files/mysql.server start
停止mysql服务
sudo /usr/loc…


博文



为什么你学不会递归?告别递归,谈谈我的经验

10-28 阅读数 1万+

可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! 可能也有一大部分人知道递归,也能看的懂递归,但在实... 博文

大学四年,分享看过的优质书籍

10-27 阅读数 1万+

数据结构与算法是我在大学里第一次接触到的,当时学了很多其他安卓、网页之类的,一开始就感觉纳闷,数据结构和算法学这个有啥用,再加上上的是一所野鸡大学,老师讲的也是模模糊糊,平时做项目、练习也几乎不用数据... 博文

2019双十一淘宝天猫刷喵币

10-28 阅读数 1万+

实现步骤

下载并安装Auto.js
官网网址:https://hyb1996.github.io/AutoJs-Docs
Github地址:https://github.com/hyb1996/Au…


博文



有哪些让程序员受益终生的建议

10-28 阅读数 1万+

从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。

敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自…


博文



最近程序员频繁被抓,如何避免面向监狱编程!?

10-28 阅读数 5万+

最近,有关程序员因为参与某些项目开发导致被起诉,甚至被判刑的事件发生的比较多: 某程序员因为接了个外包,帮别人写了个软件,结果这个软件被用于赌博导致被抓。 某公司利用爬虫抓取用户信息,最后被发现,导致... 博文

一文搞懂什么是TCP/IP协议

10-28 阅读数 1万+

什么是TCP/IP协议?

计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件…


博文



各大公司在GitHub上开源投入排名分析

11-05 阅读数 2120

基于GitHub的数据进行分析各个公司在开源上的投入排名 博文

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

10-28 阅读数 7万+

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频... 博文

学习 Java 应该关注哪些网站?

10-28 阅读数 1万+

经常有一些读者问我:“二哥,学习 Java 应该关注哪些网站?”,我之前的态度一直是上知乎、上搜索引擎搜一下不就知道了。但读者对我这个态度很不满意,他们说,“我在问你,又不是问知乎,问搜索引擎。”你还... 博文

哪些 Java 知识不需要再学了

10-28 阅读数 9254

张无忌在学太极拳的时候,他爹的师父张三丰告诫他一定要把之前所学习的武功全部忘掉,忘得越多就会学得越快。 同样的,自学 Java 的时候一定要先知道哪些 Java 知识不需要再学了,毕竟技术的更新迭代就... 博文

二叉树(从建树、遍历到存储)Java

11-06 阅读数 430

目录一、结构二、二叉树的遍历1.前序遍历(递归+非递归)2.中序遍历(递归+非递归)3.后序遍历(递归+非递归)4.层次遍历代码功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图... 博文

Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截

11-03 阅读数 2658

本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。... 博文

大学四年,我把私藏的自学「学习网站/实用工具」都贡献出来了

10-29 阅读数 2万+

在分享之前,先说说初学者如何学习编程,这个话题想必非常的重要,要学好编程,给你一些学习网站也好、实用工具也好,但前提是你知道如何去学习它。 见过很多初学者,以及小鹿我刚开始学习的时候,也是自己瞎摸索,... 博文

中国麻将:世界上最早的区块链项目

10-29 阅读数 2万+

中国麻将:世界上最早的区块链项目

最近区块链这个玩意又被市场搞的很是火热,相信大部分人都不太清楚这玩意到底是怎么样的一个概念,它来了,它来了,它到底是啥~ 国家都开始发文支持了,下面是一个通俗易懂的…


博文



比特币原理详解

10-29 阅读数 7296

一、什么是比特币

比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是…


博文



Python 基础(一):入门必备知识

10-30 阅读数 1万+

Python 入门必备知识,你都掌握了吗? 博文

Spring简介、框架核心、优缺点、应用场景

10-29 阅读数 2649

文章目录Spring简介Spring的设计目标Spring的优缺点优点缺点Spring的应用场景 Spring简介

Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是…


博文



这30个CSS选择器,你必须熟记(上)

10-30 阅读数 1万+

关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...... 博文

                
                                

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

你可能感兴趣的:(Java基础)