AnthonyZero's Bolg

Love Coding,Enjoy Life


  • 首页

  • 归档

  • 分类

  • 标签
AnthonyZero's Bolg

Spring:IOC原理总结

发表于 2018-04-03 | 分类于 Spring

IOC容器介绍

Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。

  • BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身.
  • ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合我们都直接使用 ApplicationContext 而非底层的 BeanFactory。
阅读全文 »
AnthonyZero's Bolg

设计模式:策略模式

发表于 2018-03-02 | 分类于 设计模式

定义

策略模式是一种行为型模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

特点

1)一组算法,那就是不同的策略。
2)这组算法都实现了相同的接口或者继承相同的抽象类,所以可以相互切换。

阅读全文 »
AnthonyZero's Bolg

Java学习系列:LinkedHashMap实现原理

发表于 2018-02-06 | 分类于 Java

LinkedHashMap概述

LinkedHashMap是一个关联数组、哈希表,它是线程不安全的,允许key为null,value为null。它继承自HashMap,实现了Map<K,V>接口。其内部还维护了一个双向链表,在每次插入数据,或者访问、修改数据时,会增加节点、或调整链表的节点顺序。以决定迭代时输出的顺序。
默认情况,遍历时的顺序是按照插入节点的顺序。这也是其与HashMap最大的区别。也可以在构造时传入accessOrder参数,使得其遍历顺序按照访问的顺序输出。
因继承自HashMap, 除了输出无序,其他LinkedHashMap都有,比如扩容的策略,哈希桶长度一定是2的N次方等等。LinkedHashMap在实现时,就是重写override了几个方法。以满足其输出序列有序的需求

阅读全文 »
AnthonyZero's Bolg

Java学习系列:LinkedList实现原理

发表于 2018-01-08 | 分类于 Java

LinkedList概述

LinkedList是有序并且可以元素重复的集合,底层是基于双向链表的。也正因为是链表,所以也就没有动态扩容的步骤了。
除了 实现List 接口之外,LinkedList 还实现了 Deque,Cloneable,Serializable 三个接口。这说明该数据结构支持队列,克隆和序列化操作的。与 ArrayList 一样,允许 null 元素的存在,且是(不支持多线程)的。

阅读全文 »
AnthonyZero's Bolg

Java学习系列:HashSet实现原理

发表于 2017-12-02 | 分类于 Java

HashSet概述

HashSet实现了Set接口,它的底层是由HashMap来支持的。HashSet的元素实际上是存储在底层(HashMap的key)上的。由于HashMap的无序不重复特性,HashSet存储的元素也是无序的,并且元素也不能重复,同时也只允许存储一个null元素。

阅读全文 »
AnthonyZero's Bolg

Java学习系列:ArrayList实现原理

发表于 2017-11-08 | 分类于 Java

ArrayList概述

ArrayList是我们常用的集合类,是基于数组实现的。不同于数组的是ArrayList可以动态扩容。

ArrayList 是 java 集合框架中比较常用的数据结构了。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。

  • 注:本文解析的 ArrayList 源代码基于 Java 1.8
阅读全文 »
AnthonyZero's Bolg

Java学习系列:HashMap实现原理

发表于 2017-10-04 | 分类于 Java

HashMap概述

HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变

HashMap的数据结构

在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体(以数组存储元素,如有hash相同的元素,在数组结构中,创建链表结构,再把hash相同的元素放到链表的下一个节点)

阅读全文 »
AnthonyZero's Bolg

MySQL递归遍历树

发表于 2017-08-28 | 分类于 SQL

SQL递归

众所周知,目前的Mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的。这个得益于Mysql允许在SQL存储过程内使用@变量

创建表 机构信息

CREATE TABLE def_org_info (
org_id bigint(20) NOT NULL COMMENT ‘机构ID’,
org_type int(11) NOT NULL COMMENT ‘机构类型 1 企业 2 部门 3 分公司 4 配送中心 5 门店 6 车间 7 质检部 8 仓库’,
up_org_id bigint(20) NOT NULL COMMENT ‘上级机构ID,顶级机构填0’,
org_no varchar(32) NOT NULL COMMENT ‘编号’,
org_name varchar(64) NOT NULL COMMENT ‘名称’,
org_simple_name varchar(64) DEFAULT NULL COMMENT ‘简称’,
org_pinyin varchar(64) DEFAULT NULL COMMENT ‘机构拼音’,

阅读全文 »
AnthonyZero's Bolg

MySQL横纵表相互转换

发表于 2017-07-20 | 分类于 SQL

概要

横表就是普通的建表方式,如表结构为:主键、字段1、字段2、字段3…。 如果变成纵表后,则表结构为: 主键、字段代码、字段值。而字段代码则为字段1、字段2、字段3…。 具体为电信行业的例子。以用户帐单表为例,一般出账时用户有很多费用,其数据一般存储为:时间,客户ID,费用科目,费用。这种存储结构一般称为纵表,其特点是行数多,字段少。纵表在使用时由于行数多,统计用户数或对用户进行分档时还需要进行GROUP BY 操作,性能低,且操作不便,为了提高性能,通常根据需要将纵表进行汇总,形成横表,比如:时间、客户ID、基本通话费、漫游通话费、国内长途费、国际长途费…。

横表

  • 优点:一行表示了一个实体记录,清晰可见,一目了然。
  • 缺点:如果现在要给这个表加一个字段,那么就必须重建表结构。
    纵表
  • 优点:如果现在要给这个表加一个字段,只需要添加一些记录。
  • 缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先group by,较繁琐。
    结论
  • 应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
阅读全文 »
AnthonyZero's Bolg

Java实现简单加密算法

发表于 2017-03-24 | 分类于 数据结构与算法

概要

本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法.BASE64编码算法不算是真正的加密算法。MD5、SHA、HMAC这三种消息摘要算法,可谓是非可逆加密,就是不可解密的加密方法(单向)。

  • BASE64 严格地说,属于编码格式,而非加密算法
  • MD5(Message Digest algorithm 5,信息摘要算法)
  • SHA(Secure Hash Algorithm,安全散列算法)
  • HMAC(Hash Message Authentication Code,散列消息鉴别码)

消息摘要算法用于数据校验、对称加密算法用于数据加密、非对称加密算法用于密钥交换、数字签名算法用于身份验证等等。

阅读全文 »
1…678
Pingjin

Pingjin

Java/GoLang攻城狮

76 日志
17 分类
93 标签
GitHub Twitter Weibo 倔金
© 2017 - 2022 Pingjin
本站访客数:
主题 - NexT.Pisces