JDK8

主结构为Node<K,V>数组。数组下标为(size()-1)&hash。注意TreeNode为Node子类。所以数组中实际存储的可能为Node,也可能为TreeNode红黑树结构。

Node(int hash, K key, V value, Node<K,V> next) {
    this.hash = hash;
    this.key = key;
    this.value = value;
    this.next = next;
}

当冲突小于阈值时,数组中存储Node链表。

当大于阈值时,数组中存储的是TreeNode。存储时有将Node转换为TreeNode的操作过程。

static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> {
    TreeNode<K,V> parent;  // red-black tree links
    TreeNode<K,V> left;
    TreeNode<K,V> right;
    TreeNode<K,V> prev;    // needed to unlink next upon deletion
    boolean red;
    TreeNode(int hash, K key, V val, Node<K,V> next) {
        super(hash, key, val, next);
    }
}
if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
    treeifyBin(tab, hash);

网上有人说是将自动HashMap转换为TreeMap是严重错误,实际是Node转为TreeNode。

Entry<K,V> extends HashMap.Node<K,V>;

TreeNode 继承 LinkedHashMap.Entry 继承 Node

 

resize() to double currentCapacity

default init capacity 16

default loadFactor 0.75

threshHold=loadFactor*capacity

 

无法解决,资源文件UTF-8,freemarker 编码UTF-8。

资源文件名: ValidationMessages_zh_CN.properties

内容:

mobile.empty=手机号必填
userId.empty=请输入用户Id
userName.empty=请输入用户名
password.empty=请输入密码

ascii2native后不识别资源内容

加上:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="useCodeAsDefaultMessage" value="false"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="fallbackToSystemLocale" value="true"/>
<property name="cacheSeconds" value="60" />
<property name="basenames">
<list>
<value>classpath:ValidationMessages</value>
</list>
</property>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<property name="validationMessageSource" ref="messageSource"/>
</bean>

依然无效,此问题待解决!

update:

经过几番折腾,发现没有配置下面这行

<mvc:annotation-driven validator="validator"/>

配置后,生效!

$ git reset –hard HEAD@{XXX}
XXX为SHA1
需要注意的是,hard reset将会让你在那个动作之后的修改全部消失,需要谨慎使用。

Git reset commitid file 恢复文件

git checkout commitid

git checkout master

用git status查看HEAD信息

用git checkout HEAD — filename 也能恢复(某些情况下)

Posted in Git.

更新3点:1、目录结构有变化;2、增加侧栏的隐藏功能;3、更新了模板,便于实现侧边栏隐藏功能。

1、将admin目录改成了panel,将login.php和logout.php放到了panel下,同时template文件也做了文件夹变更。

为什么要这么样,很多人都提出,希望能将这几个文件放到【admin】目录下,这样前台后台就可以共用一个域名来访问,而不会产生文件冲突。

又因为admin这个词通常的后台都用这个名字,所以就改成了panel。

一般建议访问的地址形式为:http://xxx.com/uploads/panel/,uploads目录下整个都是后台的东西,配置文件里

define ( ‘ADMIN_URL’ ,’http://xxx.com/uploads’);

注意:xxx.com 在apache里对应的目录是在uploads上一层即
ServerName xxx.com
DocumentRoot d:/wamp/www/osadmin/uploads

全新安装不要执行update_to_v2.1.0.sql。

升级安装:安装包中包括update_to_v2.1.0.sql ,先将里面的三条sql语句执行,然后覆盖原有的文件,然后访问uploads/ 即可。

注意,升级前,请先备份。

如果更改了uploads文件名,请以上步骤也对应修改。

2、增加侧边栏的隐藏功能,侧边栏的状态在当前浏览器进程有效。

3、更新了模板。

Good Luck。