本文是基于虚拟机进行安装的,和真机安装差不多,均是参考wiki 进行操作,但在实际操作中做了一些简化,如在安装过程中有任何问题,请以 wiki 为准, 本文开始于 2019.07.02,发表于 2019.10.14
安装环境,本机是 MacOS,虚拟机软件是 VirtualBox。
本文是基于虚拟机进行安装的,和真机安装差不多,均是参考wiki 进行操作,但在实际操作中做了一些简化,如在安装过程中有任何问题,请以 wiki 为准, 本文开始于 2019.07.02,发表于 2019.10.14
安装环境,本机是 MacOS,虚拟机软件是 VirtualBox。
在日常开发中,我们可能无时无刻都在使用数组,我们都知道数组是有局限性的,比如固定大小,无法扩容,但是你能自己手写一个数组解决上面的痛点呢?
看过 Java
源代码的都知道,Java
中的 ArrayList
底层实现就是数组,那我们就自己通过数组来实现自己的 ArrayList
具体代码见 码云 和 Github
其实实现自己的 ArrayList
不是我们的目的,关键是我们要分析实现细节,以及其中的时间复杂度。
在算法和数据结构领域,一般使用时间复杂度分析的方式来检验代码的性能。时间复杂度分析本身是一个相对理论化的领域,如果真要研究它的话,里面涉及大量数学的内容和一些新的概念,如果不是专门从事这方面工作的人,研究的这么深入意义不大,所以本文也只是相对简单的说一下时间复杂度是怎么一回事,让大家有个相对感性的认识即可。当然了,如果看完本文之后还能对简单的算法进行一些时间复杂度分析那就更好了。
在开发过程中很容易出现改错分支的情况,例如,本来应该在 dev
分支上修改的内容,却在 test
分支上做了修改并且进行了多次提交,这种情况可能处理起来比较麻烦了,但是有了 cherry-pick
一样很轻松解决。
cherry 是樱桃的意思,pick 是选择,挑选的意思。
1 | $ git cherry-pick commit-id #将某个提交应用到当前所在的分支。 |
本文是基于 SpringBoot 2.0 以上版本。注意,SpringBoot 2.0 需要 Tomcat 8.5 以上版本。
默认情况下,SpringBoot 是打成 jar 包的,但是有人可能更喜欢打成 war 部署到 Tomcat 或其他 Servlet 容器中。
SpringBoot 有 jar 改成 war 大约有如下步骤:
- 修改 pom.xml 文件,将 jar 改成 war
- 排除内置的 Tomcat 容器,并添加依赖 spring-boot-starter-tomcat,使其 scope 为 provided。
- 启动类继承 SpringBootServletInitializer
- 打包部署
炸一看到 join() 方法可能有点懵,不知道此方法是干啥的。下面从源码的角度分析一下此方法,并结合相应的示例彻底搞懂 join() 方法。
首先我们应该知道 join() 方法是定义在 Thread 类里面的,所以调用者必须也是一个线程类,必须先调用 start 方法再调用 join 方法
例如:
1 | Thread t = new CustomThread(); |
在tomcat中部署java的web应用程序,过一段时间后出现tomcat的java进程持续占用cpu高达100%,导致web程序访问受阻。
- 进行大量的数据计算
- 出现死循环
说到 Redis 事物,肯定会联想到数据库的事物,先看一下数据库的事物执行流程和 Redis 的事物执行流程的异同,数据库以 MySQL 为例。
步骤 | MySQL | Redis |
---|---|---|
开启事物 | start transaction | multi |
执行语句 | 普通 SQL 语句 | 普通命令 |
失败情况 | rollback 回滚 | discard 取消 |
成功情况 | commit 提交 | exec 执行 |
数据库的事物具有 ACID 四个特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。Redis 是否有如上特性呢?
说到事物很多都会拿银行转账为案例,此处也不例外。也是一个银行转账的场景,即张三(原有500块钱)给李四(目前有200块钱)转 100 块钱。期望得到的结果是转账完成之后,张三 400块钱,李四 300 块钱。
数据库的情况在此就不多说了,主要看一下 Redis 如何失败回滚的情况。
设置 KEY 中的 feild 属性值为 value
1 | 127.0.0.1:6379> hset account name zhangsan |
设置 KEY 中属性 feild1 … feildN 中的值分别为 value1 … valueN
1 | 127.0.0.1:6379> hmset account age 20 address beijing |