- 博客(149)
- 资源 (2)
- 收藏
- 关注
原创 层次式架构设计-体系结构概述
软件体系结构可定义为:软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件层次式体系结构是最通用的架构,也被叫作N层架构模式(n-tier architecture pattern),这也是Java EE(J2EE)应用经常采用的标准模式。分层架构的一个特性就是关注分离(separation of concerns)。该层中的组件只负责本层的逻辑,组件的划分很容易明确组件的角色和职责。
2024-04-06 21:50:58 238
原创 信息系统架构设计-以服务为中心的企业整合实践
描绘了和Ramp Control相关的IT系统的状况,包括周围应用和应用提供的接口,这些应用和Ramp Control交互的类型和数据格式。本文将以Ramp Control系统中的Ramp Coordination流程为例,说明如何用以服务为中心的企业集成技术一步步解决该公司IT技术人员面临的企业集成问题。很明显,如此多的流程之间共享着一个业务活动的集合,如此多种类型的流程都是这些业务活动的不同组装方式。实际上,Ramp Coordination的流程因航班类型的不同,机型的不同有很大的差异。
2024-04-05 23:18:17 982
原创 什么是数据库的三级模式两级映象?
外模式/概念模式映象(逻辑映象):是表和视图之间的映象,存在于概念模式和外模式之间;若表中的数据发生了修改,只需修改此映象,而无需修改应用代码。概念模式/内模式映象(物理映象):是表和数据的物理存储之间的映象,存在于概念模式和内模式之间;若修改了数据的存储方式,只需要修改此映象,而无需修改应用代码
2024-01-27 18:45:00 770
原创 什么是Restful?
REST是英文representational state transfer(表象性状态转变)或者表述性状态转移。Rest是web服务的一种架构风格。使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议。轻量级,跨平台,跨语言的架构设计。它是一种设计风格,不是一种标准,是一种思想。对应的中文是rest式的Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务。
2023-12-10 19:49:52 924
原创 如何理解java中的context对象?
首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境;其 次,在web.xml中会提供有contextLoaderListener。
2023-12-10 19:48:05 1378
原创 什么是java枚举?为什么要用java枚举?
创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。/*** 枚举测试类。
2023-11-18 21:35:59 146
原创 你真的了解java中的Class对象吗?
为了在使用泛化的Class引用时放松限制,可以使用通配符,它是java泛型的一部分。为了创建一个Class引用,它被限定为某种类型,或该类型的任何子类型,你需要将通配符与extends关键字相结合,创建一个范围。比如程序创建第一个对类的静态成员的引用时,就会加载这个类。为了生成这个类的对象,运行这个程序的JVM,会使用“类加载器”的子系统。因此,使用new操作符创建类的新对象也会被当作对类的静态成员的引用。一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象。(同名的.class文件中)。
2023-11-18 21:30:25 89
原创 什么是java反射机制?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Class对象的由来是将class文件读入内存,并为之创建一个Class对象。
2023-11-18 21:29:37 114
原创 什么是静态代理、JDK动态代理、cglib动态代理?
静态代理的缺点很明显:一个代理类只能对一个业务接口的实现类进行包装,如果有多个业务接口的话就要定义很多实现类和代理类才行。而且,如果代理类对业务方法的预处理、调用后操作都是一样的(比如:调用前输出提示、调用后自动关闭连接),则多个代理类就会有很多重复代码。这时我们可以定义这样一个代理类,它能代理所有实现类的方法调用:根据传进来的业务实现类和方法名进行具体调用。——那就是动态代理。
2023-11-18 21:25:38 97
原创 git基础命令
git是一种分布式版本控制系统。版本库是集中存放在中央服务器。集中式版本控制系统必须联网才能工作,本地电脑从中央服务器获取最新的版本,修改之后再推送给中央服务器。中央服务器出现问题,会影响所有人的工作。分布式版本控制系统没有中央服务器,每个人的电脑上都是一个版本库。分布式版本控制系统有一台用于交换大家修改的远程服务器,例如gitHub,gitLab。与本地版本库的操作不需要联网。初始化git版本库之后会生成一个隐藏文件.git,可以理解为git的版本库repository。
2023-11-18 21:16:25 296
原创 二叉树:有了如此高效的散列表,为什么还需要二叉树?
上一节我们学习了树、二叉树以及二叉树的遍历,今天我们再来学习一种特殊的的二叉树,二叉查找树。二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。我们之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是 O(1)。
2023-10-28 21:29:01 118
原创 二叉树:什么样的二叉树适合用数组来存储?
前面我们讲的都是线性表结构,栈、队列等等。今天我们讲一种非线性表结构,树。树这种数据结构比线性表的数据结构要复杂得多,内容也比较多,所以我会分四节来讲解。
2023-10-28 21:28:11 154
原创 哈希算法:如何防止数据库中的用户信息被脱库?
散列表也叫哈希表,散列函数也叫哈希函数、哈希算法,都源于英文Hash。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法)对输入数据非常敏感,哪怕原始数据只修改了一个Bit,最后得到的哈希值也大不相同散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值。
2023-10-28 21:25:25 164
原创 散列表:为什么散列表和链表经常会一起使用?
链表那一节,我们用链表来实现LRU缓存淘汰算法,但是链表实现的LRU时间复杂度是O(n),可以通过散列表将时间复杂度降低为O(1)跳表那一节,Redis的有序集合是使用跳表来实现的,跳表可以看成一种改进版的链表。Redis有序集合不仅使用了跳表,还用到了散列表。java中LinkedHashMap这样一个常用的容器,也用到了散列表和链表两种数据结构。
2023-10-22 18:17:13 120
原创 散列表:如何打造一个工业级水平的散列表?
开放寻址法的缺点:开放寻址法解决冲突的散列表,删除数据比较麻烦,需要特殊标记已经删掉的数据。在开放寻址法中,所有的数据都存储在一个数组中,比起链表法来说,冲突的代价更高。所以,使用开放寻址法解决冲突的散列表,装载因子的上限不能太大。这也导致这种方法比链表法更浪费内存空间。总结:当数据量比较小、装载因子小的时候,适合采用开放寻址法。这是java中的ThreadLocalMap使用开放寻址法解决散列冲突的原因。
2023-10-22 18:16:13 126
原创 散列表:Word文档中的单词拼写检查功能是如何实现的?
散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。散列表的两个核心问题是散列函数设计和散列冲突解决。散列函数设计的好坏决定了散列冲突的概率,也就决定了散列表的性能。
2023-10-22 18:15:18 118
原创 跳表:为什么Redis一定要用跳表来实现有序集合
二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就真的没法使用二分查找算法了吗?我们可以对链表稍加改造,就可以支持类似“二分”的查找算法。改造之后的数据结构叫作“跳表(Skip list)”跳表是各方面性能都比较优秀的,可以支持快速的插入、删除、查找操作,写起来不复杂,甚至可以替代红黑树(Red-black tree)。问题:Redis为什么会选择用跳表来实现有序集合呢?
2023-10-22 18:14:13 95
原创 二分查找:如何快速定位IP对应的省份地址?
参照变体一} else {return -1;**凡是用二分查找能解决的,绝大部分我们更倾向于用散列表或者二叉查找树。**即便是二分查找在内存使用上更节省,但是内存紧缺的情况并不多。二分查找真的没什么用处了吗?“值等于给定值”的二分查找确实不怎么会被用到,二分查找更适合用在“近似”查找问题,在这类问题上,二分查找的优势更加明显。比如这篇讲到的几种变体问题,用其他数据结构,比如散列表、二叉树,就比较难实现了。
2023-10-22 18:07:43 678
原创 二分查找:如何用最省内存的方式实现快速查找功能?
有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,但是难掌握好,灵活运用更加困难。
2023-10-14 22:41:03 299
原创 排序优化:如何实现一个通用的、高性能的排序函数?
大部分排序函数都是采用O(nlogn)排序算法实现,但是为了尽可能提高性能,会做很多优化。排序中的优化策略,比如合理选择分区点、避免递归太深等。
2023-10-14 22:40:09 1039
原创 线性排序:如何根据年龄给100万用户数据排序?
学习了三种线性时间复杂度排序算法,桶排序、计数排序、基数排序。他们对排序的数据都有比较苛刻的要求,应用不是很广泛。但是如果数据特征比较符合这些排序算法的要求,应用这些算法,会非常高效,线性时间复杂度可以达到O(n)。桶排序和计数排序的排序思想非常相似,都是针对范围不大的数据,将数据划分成不同的桶来实现排序。基数排序要求数据可以划分成高低位,位之间有递进关系。比较两个数,我们只需要比较高位,高位相同再比较低位。而且每一位的数据范围不能太大,因为基数排序算法需要借助桶排序或者计数排序来完成每一位的排序工作。
2023-10-14 22:39:24 177
原创 排序:如何用快排思想在O(n)内查找第K大元素?
冒泡排序、插入排序、选择排序三种排序算法,时间复杂度都是O(n^2),比较高,适合小规模数据的排序。和两种时间复杂度O(nlogn)的排序算法,适合大规模的数据排序,比上述三种更常用。归并排序和快速排序都用到了分治思想,非常巧妙。我们可以借助这个思想,解决排序问题:如何在O(n)的时间复杂度内查找一个无序数组中的第K大元素?
2023-10-13 21:52:14 430
原创 排序:为什么插入排序比冒泡排序更受欢迎?
需掌握的的排序:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。按照时间复杂度可以分为三类:?
2023-10-13 21:50:20 216
原创 队列:如何在线程池等有限资源池中的应用?
我们知道,CPU 资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致CPU频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。?
2023-10-13 21:48:28 96
基于springMVC+spring+mybatis+mysql框架的增删改查demo
2016-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人