我的开篇博客

今天是2022年2月10号,是我第一次写博客的时间。我不知道别人的博客第一篇是关于什么的内容。也许是技术,也许是感言。也许什么都没有,这取决于大家各自的想法。我的想法则是写一篇关于为什么我必须要写博客的理由。

是的,我已经逐渐弄清楚写博客究竟是为了什么?

我听过很多种说法,比如,写博客最初是为了记录相关的知识,今后有所遗忘也可以复查,也可以额加深对于技术的理解。也有的说博客最后会进入收费的时代,写博客是有收益的。也有的说,可以梳理相关的工作和学习的经验和教训。单纯的知识分享,也不是没有这种人,但是肯定不是我,因为我还没到可以教育别人的地步。

我写博客的目的,正是我失败的经历后痛下决心要改善自己的面试口才。

面试的时候,说话流于表面,没有思想深度,没有技术深度,让人听了跟没听也并没有什么分别。凡此种种,实叫人不可忍,也不可解。就连我自己复盘的结果,也看不到自己有成功的闪光点!

因此,今后我的博客内容,最主要的方面,就是对于技术的理解。

先说我今天的几个技术关键词

jenkins

要说jenkins就必须先提到持续集成,持续集成又是软件测试的(必要环节),集成就是自动化构建来验证软件的性能,通过一段时间的多次自动化构建来验证,发现集成中的错误。

为什么要持续集成? 发现错误是肯定的,定位错误,降低代码整合的错误,防止长时间过后,集成失败。更好的去了解进度,更好的收集数据。

持续交付? 也就是不断的将软件的新版本,交付给质量团队或者用户,它强调的是,无论如何更新,都可以随时随地交付软件。

接下来就是持续部署,持续部署的目标就是,代码在任何时刻都是可部署的,可以进入生产阶段。

它的前提就是,能自动化完成测试,构建,部署等步骤。

jenkins就是这样的持续集成的服务器,并且具备持续交付的能力。

jenkins的有关细节我下一篇博客再讲。

接下来是多线程安全问题

多线程安全的定义就是,多个线程对于共享的数据结构的访问,可能会出现安全问题。这里面的访问就包括两个方面,读操作和写操作,读操作不会对数据改变,写操作就会对数据造成影响。如果没有经过线程同步,多线程模式下的数据发生安全问题几乎是不可避免的了。

多线程安全的三个基本特征 原子性 可见性 有序性。

原子性就是对于数据的操作时原子的,操作要么都执行,要么都不执行。操作的不可分,其表现在于对于共享变量的某些操作,应该是不可分的,必须连续完成。对于原子性,一般是通过加锁来保证的。并且,加锁,同样可以保证可见性和有序性。

可见性就是一个线程对于数据结构的影响对于其他线程时可见的,也就是说,当某一个线程对数据结构中的数据写操作后,数据的改动的内容即同步到其他线程中。线程之间进行通信是通过共享内存的方式进行通信的,但是为了加快执行的速度,线程一般不会直接操作内存,而是操作缓存。

实际上,线程操作的是自己的工作内存,而不会直接影响操作主内存。如果线程对变量的操作没有刷写主内存的话,仅仅只是改变了自己内存的变量的副本,那么对于其他线程来说是不可见的。而如果另一个线程的变量没有读取主内存的变量,使用旧的变量值,这样对于它来说变量也是不可见的。这里涉及到一个先后的问题,但是一般如果对变量加关键字volatile就可以保证线程变量的可见性。

有序性 有关有序性的问题就是,程序在执行的时候,程序的代码执行顺序,和程序语句执行的顺序是不一致的,因为虚拟机对于指令的重排序的缘故。因为java内存模型,允许编译器和处理器对指令进行重排序,但是重排序的过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。 而要防止指令的重排序,需要使用volatile关键字,因为volatile关键字可以让操作变量的语句不会进行重排序,这样也就不会发生线程安全问题。

本想写多点,但是时间有限,今天就到这,总结经验很重要!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值