算法,数据结构,设计模式
文章平均质量分 54
王小二(海阔天空)
这个作者很懒,什么都没留下…
展开
-
设计模式:23种设计模式之单例模式
还是举ThreadA和ThreadB的例子:当Thread经过第一次检查对象为null时,会接着去加锁,然后去执行new SingletonLazy(),上边已经分析过了,改步骤存在重排现象,如果发生重排,即instance分配了内存地址,但是很没有完成初始化工作,而此时ThreadB,刚好执行第一次检查(没有加锁),instance已经分配了地址空间,不再为null,那么ThreadB会获取到没有完成初始化的instance,这就出现了问题。下述为饿汉式的写法,满足了上边说的第1,2条要求。原创 2024-09-12 19:55:51 · 839 阅读 · 0 评论 -
JSON:数据格式及其转换
JSON里面是一个对象,如果是多个对象,则用逗号间隔,即{},{},这样就组成了一个对象序列,为了辨别开始和结束,则需要加上[],即实际传递的形式应该是[{},{}],如果只要传递一个对象,则{}的形式就可以了。对象的属性必须在“”里面,属性与值之间用:隔开,属性之间用,来分隔,如果属性的值为数组,则用[]包括起来。3、{“属性1”:值1,”属性2”:{“属性a”:值a,”属性b”:[值b,值c]}}2、{“属性1”:值1,”属性2”:[值1,值2]}1、{“属性1”:值1,”属性2”:值2}原创 2018-01-29 20:58:07 · 438 阅读 · 1 评论 -
数据结构:浅谈树的遍历方式
遍历的含义就是把树的所有节点(Node)按照某种顺序访问一遍。包括前序,中序,后续,广度优先(队列),深度优先(栈)5 种遍历方法。之所以叫前序、中序、后序遍历,是因为根节点在前、中、后。数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。原创 2024-09-10 08:00:00 · 342 阅读 · 0 评论 -
JSON:浅谈JSON的三种解析方式
JSON是一种取代XML的数据结构,和XML相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。JSON就是一串字符串 只不过元素会使用特定的符号标注。a.{} 双括号表示对象b.[] 中括号表示数组c."" 双引号内是属性或值d.: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象){"name": "Michael"} 可以理解为是一个包含name为Michael的对象。原创 2018-06-03 16:32:02 · 9753 阅读 · 1 评论 -
XML:浅谈操作XML的四种方式(SAX, DOM, JDOM, DOM4J)
(1)DOM4J性能最好,连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J。DOM4J的XPath功能确实很简单(2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM。(3) SAX表现较好,这要依赖于它特定的解析方式-事件驱动。原创 2018-06-03 16:06:36 · 316 阅读 · 1 评论 -
JSON:JSON基础知识总结
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON是用字符串来表示Javascript对象,例如可以在Servlet中发送一个JSON格式的字符串给客户端Javascript,Javascript可以执行这个字符串,得到一个Javascript对象。XML也可以用来作为数据交换,在Servlet中发送XML给Javascript,然后Javascript再去解析XML。原创 2018-02-23 14:57:24 · 560 阅读 · 1 评论 -
算法:插入排序
插入排序非常类似于整扑克牌:在开始摸牌时,左手是空的,牌面朝下放在桌上。接着, 一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。原创 2024-09-09 09:00:00 · 352 阅读 · 0 评论 -
算法:冒泡排序
(2)这样对数组的第 0 个数据到 N-1 个数据进行一次遍历后,最大的一个数据就“沉” 到数组第N-1 个位置。(1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。(3) N=N-1,如果 N 不为 0 就重复前面二步,否则排序完成。原创 2024-09-09 08:00:00 · 141 阅读 · 0 评论 -
算法:二分查找法
二分查找又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。核心:不断二分缩小查找范围。原创 2024-09-08 09:00:00 · 139 阅读 · 0 评论 -
算法:判断一个整数是不是2的阶次方
判断整数除以2的余数是否为0,如果不为0,则直接返回false;如果为0,则将将整数除以2后重复本步骤。核心:不断除以2,缩小判断的范围。原创 2024-09-08 08:00:00 · 227 阅读 · 0 评论 -
算法:将数组随机打乱顺序,生成一个新的数组
3、将取出的随机数与原数组的最后一个数据进行置换;1、创建一个与原数组长度相同的新数组;中随机取出一个数据,添加进新的数组;核心:缩小原数组的可随机取数范围。2、从原数组的有效的可取数范围。4、重复步骤2和3。原创 2024-09-07 09:00:00 · 208 阅读 · 0 评论 -
设计模式:23种设计模式详解
设计模式:23种设计模式详解原创 2017-12-22 21:47:06 · 365 阅读 · 0 评论 -
Spring:Spring涉及到的设计模式汇总
Spring:涉及到的设计模式汇总1. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参...原创 2018-06-21 19:42:13 · 380 阅读 · 0 评论 -
算法题:检查符号是否成对出现
遍历字符串,如果字符是左括号就直接加入stack中,否则将stack 的栈顶元素与这个括号做比较,如果不相等就直接返回 false。遍历结束,如果stack为空,返回 true。比如 “()”、“()[]{}”、“{[]}” 都是有效字符串,而 “(]” 、“([)]” 则不是。(1)首先我们将括号间的对应规则存放在 Map 中;我们可以利用栈 Stack 来解决这个问题。(1)左括号必须用相同类型的右括号闭合。(2)左括号必须以正确的顺序闭合。原创 2022-10-24 16:50:25 · 436 阅读 · 0 评论 -
算法题:最低成本联通所有城市
一、题目想象一下你是个城市基建规划者,地图上有 N 座城市,它们按以 1 到 N 的次序编号。给你一些可连接的选项 conections,其中每个选项 conections[i] = [city1, city2, cost] 表示将城市 city1 和城市 city2 连接所要的成本。(连接是双向的,也就是说城市 city1 和城市 city2 相连也同样意味着城市 city2 和城市 city1 相连)。返回使得每对城市间都存在将它们连接在一起的连通路径(可能长度为 1 的)最小成本。该最小成本应该原创 2021-04-20 23:39:28 · 1433 阅读 · 1 评论 -
算法题:移除无效的括号
一、题目给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。有效「括号字符串」应当符合以下 任意一条 要求:空字符串或只包含小写字母的字符串可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」二、示例))(( -》 (leetode -》 leetodeleetod原创 2021-04-20 23:25:30 · 374 阅读 · 1 评论 -
数据结构:简述数据结构中的树
数据结构:简述数据结构中的树二叉树是一种从上往下分叉的一种数据结构,其每个节点最多有两个孩子节点,一左一右,左边的称为左孩子,右边的称为右孩子。如下:完全二叉树是普通二叉树除最后一层外,在每一层上的结点数均达到最大值,在最后一层上只缺少右边若干结点的二叉树。如下:满二叉树是普通二叉树中的每个结点恰好有两个孩子结点且所有叶子结点都在同一层的二叉树。如下:若普通二叉树每个节点满足左子树...原创 2020-09-27 23:04:55 · 153 阅读 · 0 评论 -
算法:费波纳茨数列1 1 2 3 5 8 13 21
故事来源: 一天,皇帝骑在马上,率领着文武百官,在号兵鼓手、马队的簇拥下,浩浩荡荡向比萨市费波纳茨的居所进发。弗德烈皇帝向费波纳茨提出了这样一个问题:如果一对兔子从第二个月开始,每月可产一对兔子,试问一年后这个特定的区域里共有多少对兔子?费波纳茨顺口回答了皇帝的问题:共有144对,并把他的计算方法说了出来——1,1,2,3,5,8,13,21,34,55,89,144,这就是费波纳茨数列的原版。...原创 2020-02-26 21:08:08 · 5556 阅读 · 0 评论 -
设计模式:简述设计模式的六大原则
设计模式:简述设计模式的六大原则一、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。二、里氏代换原则(Liskov Substitution Principle) &nbs...原创 2019-06-27 15:06:02 · 260 阅读 · 0 评论 -
算法:算法概述之约瑟夫算法
算法:算法概述之约瑟夫算法 约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 public class YuesefuTest { public static void...原创 2018-06-22 20:41:17 · 710 阅读 · 0 评论 -
算法:算法概述
算法:算法概述 在计算机软件专业中,算法分析与设计是一门非常重要的课程,很多人为它如痴如醉。很多问题的解决,程序的编写都要依赖它,在软件还是面向过程的阶段,就有‘程序=算法+数据结构’这个公式。算法的学习对于培养一个人的逻辑思维能力是有极大帮助的,它可以培养 我们养成思考分析问题,解决问题的能力。 如果一个算法有缺陷,或不适合某个问题,执行这个算法将不会解决这...原创 2018-06-22 20:19:15 · 368 阅读 · 0 评论 -
算法:常见hash算法的原理
算法:常见hash算法的原理 散列表(Hash table,也叫哈希表),它是基于高速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构能够理解为一个线性表,可是当中的元素不是紧密排列的,而是可能存在空隙。 散列表,是依据关键码值(Key value)而直接进行訪问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来訪问记录,以加快查找的速...原创 2018-06-22 20:06:28 · 559 阅读 · 0 评论