记一次阿里云环境搭建
在阿里云上现在购买esc好像默认是专有网络,以前使用的是经典网络。如果现在有两台服务器分别不在同一个账号上,那么需要配置高速通道。不过还好的是对于同一个地区高速通道并不要钱。
在其中一台服务器上部署测试环境,同时搭建jenkins用来自动化打包和发布。
先安装JDK、Tomcat、Nginx,不会有什么问题。
在阿里云上现在购买esc好像默认是专有网络,以前使用的是经典网络。如果现在有两台服务器分别不在同一个账号上,那么需要配置高速通道。不过还好的是对于同一个地区高速通道并不要钱。
在其中一台服务器上部署测试环境,同时搭建jenkins用来自动化打包和发布。
先安装JDK、Tomcat、Nginx,不会有什么问题。
哈希表(Hash Table,也叫散列表),是根据关键码值 (Key-Value) 而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
在Java中HashMap就是使用的哈希表。
在HashMap中实际存储数据时在一个数组中,在插入时如果放入key,通过(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)
获取hash,在数据存入table时,通过(n - 1) & hash
获取数据应该存入数组下角位置。如果该位置存在数据,在JDK1.8之前是通过一个链表存入,如果重复就会吧数据放入该链表后,在JDK1.8里面是先通过链表存储,如果链表长度超过TREEIFY_THRESHOLD
8通过红黑树来存储的数据。在取值时通过比较值来判断获取的key是否是传入当然key。
在转换树时,通过判断MIN_TREEIFY_CAPACITY
64,超过才会转换为树,为了避免在哈希表建立初期,多个键值对恰好被放入了同一个链表中而导致不必要的转化。
在插入数据时,如果数据满了,当然不可能每次都放入链表或树中,这样在数据量较多的时候,会严重影响效率。在HashMap中有个扩容因子DEFAULT_LOAD_FACTOR
,当插入数据后,数据大于该扩容因子,那么会把数据进行2倍的扩容,在扩容时,如果红黑树的长度小于UNTREEIFY_THRESHOLD
6则会退化采用链表,同时把原有的数据重新插入。
在使用数据库时,因为存在不同的用户操作同一条数据,数据库可能出现如下问题:
现在开发过程中有个需求,商品没货了需要补货,简略版如下:
1、发现商品没货,生成补货单
2、如果现在有未处理补货单,先删除当前补货单,之后生成新的补货单,如果当前的补货单已经开始处理,那么忽略
3、提供API接口供修改状态
现在数据库设计,状态分为:0:待处理,1:已经认领,2:处理完毕,4:取消
简略版数据库如下:
1 | create table test.item |
Spring作为JavaWeb流行框架,其核心之一就是Bean的管理。其中有Bean的创建、管理、加载。
添加SpringBean依赖,启动Spring。
1 | <dependency> |
添加Spring配置文件application.xml
1 | <beans xmlns="http://www.springframework.org/schema/beans" |
在程序中经常会出现各种错误,在Java中可以通过异常进行展现出来。
在处理异常时,常用的关键字有:try、catch、finally、throw、throws;
try:通过会出现异常的代码块可以放入try代码块中,用于监听代码块中的是否会出现异常。
catch:通常用于捕获try代码块中出现的异常,用于发生异常捕获后做相关操作。
finally:用于try代码块执行完毕后,必须执行的地方,比如出现IOException后用于关闭连接,就算出现异常,finally也会执行。
throw:用于程序手动抛出异常。
throws:用于方法后,标识方法可能会出现异常。
在Java中异常分为两大类:Error、Exception。
Error:用来表示编译时和系统错误,出现这种错误时一般比较严重,一般有JVM抛出。
Exception:由程序本身可以处理的异常。
异常又可以分为:可检测异常、非检测异常
可检测异常:正确的程序在运行中,很容易出现的、情理可容的异常状况。编译器在编译代码时会检测该异常。一旦出现该异常,必须进行处理,也就是要么try…catch,要么throw抛出异常到上一层,由上层处理,如果一直上抛,最终会抛出到JVM层,最终导致JVM停止。除RuntimeException及其子类以外都是该异常,典型的如IOException。
非检测异常:这种异常并不会直接被编译器所检测,RuntimeException及其子类和Error。