自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 收藏
  • 关注

原创 数据库基础知识

大数据的三大相关性:容量:交易、记录、大量的数据速度:实时、成批次处理、流动变量:结构化、非结构化、半结构化一个好的数据库系统需要满足以下两点要求:合理的组织数据。高效的进行数据查询。现代的数据库系统的变化:需要存储更多的非结构化数据。更为高效的存储和读取数据。数据的定义:可被存储的,有特定意义的,描述对象特征的记录。数据库的定义:相关联的数据的集合。单独的数据是没有任何意义的。数据库可以被数据库...

2018-02-26 18:56:11 307

原创 最长的可整合的子数组的长度

题目:先给出可整合数组的定义。如果一个数组在排序后,每相邻的两个数差的绝对值都为1,则该数组为可整合数组。例如,[5,3,4,6,2]排序之后为[2,3,4,5,6],符合每相邻的两个数差的绝对值为1,所以这个数组为可整合数组。给定一个整形数组arr,请返回其中最大的可整合数组的长度。例如,[5,5,3,2,6,4,3]的最大可整合数组为[5,3,2,6,4],所以返回5.思路:最大整合数组有一个...

2018-02-15 14:52:22 349

原创 将正方形矩阵顺时针转动90度

题目:给定一个NxN的矩阵matrix,把这个矩阵调整成顺时针转动90度后的形式。例如:1  2    3   45  6    7   89  10  11  1213 14 15  16顺时针转动90度13  9   5   114  10  6  215  11  7  316  12  8  4思路:此题可以采用分解矩阵的思路解决。首先是矩阵的外围即:1   2  3   45      ...

2018-02-08 16:04:59 775

原创 在其它数都出现k次的数组中找到只出现一次的数

题目:给定一个整形数组arr和一个大于1的整数k。已知arr中只有1个数出现了1次,其他的数都出现了k次,请返回只出现1次的数。思路:根据该题的数组中很多数出现了k次只有一个数出现了1次。可以采用如下的步骤解决此题。将数组中所有的数都转换为k进制的形式。所有的数依次相加取余。最终的结果为只出现一次的数。为何将所有的数相加并取余后得到的结果就是只出现1次的书。设x为出现了

2018-02-07 17:21:22 494

原创 在其他数都出现偶数次的数组中找到出现奇数次的数

题目:给定一个整形数组arr,其中只有一个数出现了奇数次,其他数都出现了偶数次,打印这个数。要求时间复杂度为O(n),额外空间复杂度为O(1)。思路:此题可以采用异或的思想解决。异或满足交换律。假设有一个数组arr = {4,6,3,2,4,3,6,6,6}4⊕6⊕3⊕2⊕4⊕3⊕6⊕6⊕6 = 4⊕4⊕3⊕3⊕6⊕6⊕6⊕6⊕2众所周知同样的数异或之后为0,不

2018-02-06 17:41:45 418

原创 整数的二进制表达中有多少个1

题目:给定一个32位的整数n,可为0,可为正,也可为负,返回该整数二进制表达中1的个数。思路:最简单的做法就是求出一个整数如何得到它的二进制数。以整数5为例。用5除以2,取余的结果为1时代表二进制表达中含有一个1,此时的被除数变为5/2。循环直到被除数为0,循环结束。注意:负数的二进制表示的首位为1.在计数之前需要判断n的正负。代码:/** * 整数二进制中有多少

2018-02-05 17:15:50 725

原创 只用位运算不用算数运算求两个数的加减

题目:给定两个32位整数a和b,可正、可负、可0.不能使用算数运算符,分别实现a与b的加减运算。思路:两个数的相加实际上就是在二进制位上的抑或、与、移位等操作。两个数抑或表示两个数无进位的相加,两个数与再向左移动一位代表着两个数相加产生的进位。以9+3为例:代码:/** * 不使用运算符号实现运算 */ public int addNoAlph

2018-02-04 20:45:15 430

原创 回文最少分割数

题目:给定一个字符串str,返回把str全部切割为回文子串的最小分割数。思路:该题可以使用动态规划的思想来解决。首先要明确好dp[i]的概念,即从str的首个位置开始到第i个位置要切割为回文子串的最小分割数。最后的dp[str.length()-1]就是题目的结果。要求出dp[i]的值就需要遍历数组str(0~i),假设0~i之间的某个值j,char[j] == char[i]。在

2018-02-01 20:38:45 451

原创 翻转字符串

题目:给定一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体移动到右半区,右半区整体移到左边。举例:如果把chas看做字符串“ABCDE”,size=3,调整成“DEABC”。思路:首先判断该字符串左右移动的距离,取最小的哪一个。举例“1234567ABCD”。需要移动的size是7.即将1234567移动到ABCD的右边变为“ABCD1234567”

2018-01-21 11:16:29 308

原创 判断字符数组中是否所有的字符都只出现过一次

题目:给定一个字符类型的数组chas[],判断chas中是否所有的字符都只出现过一次,请根据以下两种要求实现函数。时间复杂度为O(N)。额外空间复杂度为O(1)。思路:遍历字符串时,每遍历一个字符的时候创建一个新的字符串使用replace函数将遍历到的字符替换为空字符在赋值给新建的字符。将原先的字符长度与新建的字符长度做减法,一旦大于或等于2则判断原字符中存在重复的字符。代码: /**

2018-01-16 20:57:09 410

原创 Effective Java读书笔记-复合优先于继承

继承是完成代码重用的有力手段,但它并非是完成这项工作的最佳工具。使用不当通常会导致软件非常的脆弱。在包的内部使用继承是非常安全的。对于普通的具体的类进行跨越包的边界的继承将是非常危险的。继承打破了封装性:与方法调用不同,继承打破了封装性。换句话说,子类依赖于超类中特定功能的实现细节。超类的实现有可能依赖发行版本的不同而有所变化,如果真的发生了变化,子类可能会遭到破坏,即使它的代码没有完全改变。因此子

2017-11-23 16:00:01 316

原创 Effective Java读书笔记-使可变性最小化

存在不可变类的原因:不可变的类比可变的类更加易于设计、实现和使用。它们不容易出错且更加安全。使类变为不可变需要遵守的五项原则:不要提供任何会修改对象状态的方法。保证类不会被拓展。这样可以防止粗心或者恶意的子类假装对象的状态已经改变,从而破坏类的不可变行为。为了防止子类化,一般的做法是使类变为final的。使所有的域都是final的。使所有的域都变为私有的。确保任何可变组件的互斥访问。如果类

2017-11-22 19:56:50 339

原创 最长公共子串问题

题目:给定两个字符串str1和str2,返回两个字符串的最长公共子串。要求时间复杂度为O(M*N),额外空间复杂度为O(1)的方法。思路:一开始想用KMP算法解决此题,但是众所周知KMp算法需要next数组,那么空间复杂度肯定是O(n)了。后来想到了递归的方法。刚好满足题目的要求。解题代码:public String theLongest(String str1,String str2){

2017-11-21 21:20:34 274

原创 最长公共子序列的问题

题目:给定两个字符串str1和str2,返回两个字符串的最长公共子序列。 举例str1=”1A2C3D4B56”,str=“B1D23CA45B6A”。123456或者12C4B6都是最长公共子序列,返回哪一个都行。思路:此题可以采用动态规划的思想来解。首先要构造一个矩阵Matrix[str1.length()][str2.length()]。以str1为行,str2为列。之后构造数组dp[str

2017-11-21 15:52:14 466

原创 Effective Java读书笔记-使类和成员的可访问性最小化

区别设计良好的模块和设计不好的模块,最重要的因素在于,这个模块对于外部其它的模块而言,是否隐藏了内部的数据和其他实现的细节。设计良好的模块会隐藏所有的实现细节。设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离开。然后,模块之间只通过API进行通信,一个模块不需要知道其它模块的内部工作情况。这个概念被称作信息隐藏或者封装,是软件设计的基本原则之一。Java程序设计语言提供了许多机制

2017-11-20 16:42:14 280

原创 汉诺塔问题进阶

题目:给定一个整形数组arr,其中只含有1、2和3,代表所有圆盘目前的状态。1代表左柱,2代表中柱,3代表右柱,arr[i]代表第i+1个圆盘的位置。比如,arr=[3,3,2,1],代表第一个盘子在右柱上,第二个盘子在右柱上,第三个圆盘在中柱上,第四个圆盘在左柱上。如果arr代表的状态是最优移动轨迹过程中出现的状态,返回arr这种状态是最优移动轨迹中的第几个状态。如果arr代表的状态不是最优移动轨

2017-11-18 21:26:37 563

原创 Effective Java读书笔记-考虑实现Comparable接口

compareTo方法没有在Object中声明,相反它是Comparable接口的唯一方法。compareTo方法不单单可以进行简单的同性比较,而且允许执行顺序比较。类实现了Comparable接口就表明它的实例具有内在的排序关系(natural ordering)。实现Comparable接口的对象数组进行排序的操作很简单:Array.sort(a);一旦类实现了Comparable接口,它就可以

2017-11-18 18:06:13 334

原创 汉诺塔问题

题目:给定一个整数n,代表汉诺塔游戏中从小到大放置的n个圆盘,假设开始时所有的圆盘都放在左边的柱子上,想按照汉诺塔游戏的要求把所有的圆盘都移到右边的柱子上。实现函数打印最有轨迹。思路:此题可以采用递归的思想来解决,首先设有三个柱子分别设为left,mid,right,另外有n个圆盘,现将1~n-1个圆盘从left移动到mid上,之后再将第n个圆盘从left上移动到right上,最后将mid上的1~n

2017-11-17 22:25:14 286

原创 Effective Java读书笔记-谨慎的覆盖clone

Cloneable接口的目的是作为对象的一个mixin接口,表明这样的对象允许克隆(clone)。Object的clone方法是受保护的,如果不借助反射(reflection),就不能仅仅因为一个对象实现了Cloneable,就可以调用clone方法,即使是反射调用也可能会失败,因为不能保证该对象拥有可访问的clone方法。Cloneable的作用:它决定了Object中受保护的clone方法实现的

2017-11-17 17:20:00 331

原创 最长递增子序列

题目:给定数组arr,返回arr的最长递增子序列。 举例: arr=[2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,9,8]。思路:采取两层循环来遍历数组arr,第一层循环遍历完一个数之后,在第二层循环中以第一层循环中的这个数为第一个数向左进行循环寻找比第一层循环中小的数,并取出这个数的长度并加一。这里需要用到一个判断公式:dp[i] = max(dp[i],dp[j

2017-11-12 21:00:46 294

原创 Effective Java读书笔记-始终要覆盖toString

虽然java.lang.object提供了toString方法的一个实现,但它所返回的字符串通常不是类的用户所希望看到的。它包含类的名称以及一个@符号,接着是散列码的无符号十六进制表示法,例如”PhoneNumber@163b91”。toString通用约定指出,被返回的字符串应该是一个“简洁的”,但信息丰富并且易于阅读的表达方式。toString的约定进一步指出建议所有的子类都覆盖这一方法。如果为

2017-11-12 20:40:23 228

转载 Effective Java读书笔记-覆盖equals时总要覆盖hashCode

hashCode,就是哈希值,可以理解为一个对象的标识(好的hash,能确保不同的对象有不同的hash值),Object含有hashCode方法,用来返回对象的hash值。hashCode方法多用在基于散列值的集合类,比如HashMap、HashSet和Hashtable。下面是hashCode的约束规范, 在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,

2017-11-12 19:55:02 233

原创 Effective Java读书笔记-覆盖equals时遵守的通用约定

不需覆盖equals的情况覆盖equals看似很简单,但是很多覆盖方式会导致错误,并且后果会非常严重,最简单的方法就是不去覆盖equals方法。 以下几种情况,可以不用覆盖equals方法:类的每个实例本质上是一致的。不关心是否提供了“逻辑相等”的测试功能。超类继承了equals,从超类继承过来的行为对于子类来讲也是合适的。类是私有的或者包级私有的,可以确定equals方法永远不会被调用。

2017-11-11 20:36:31 284

原创 Effective Java读书笔记-接口优于抽象类

抽象类与接口的区别:抽象类中可以有已经实现的方法,接口中只能存放方法的定义。为实现抽象类定义的类型,类必须继承抽象类。现有的类很容易被更新,以实现接口当类需要添加新的方法时,最好的办法就是定义一个接口让类去实现它。注意无法通过更新现有的类来拓展抽象类。如果有两个类都需要实现这个抽象类中的方法时,最好的办法就是将这个抽象类放在更高的层次上,定义一个类去实现这个抽象类。之后让这两个类去继承这个类。

2017-11-08 19:43:03 355

原创 最少货币数问题

题目:给定数组arr, arr中所有的值都为正数且不重复。每个值代表一中面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。思路 :采用动态规划的思想来解此题。首先设定dp[i][j]数组,i的意思是当前的最大货币数,j的意思是目标货币数。因此dp[i][j]的意思就是使用最大货币i可以组成货币j的最少货币数。假设现在有{10,5,2,1}的货币,

2017-11-06 19:59:05 800

原创 LeetCode——Max Points on a Line

题目:Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.题目大意:给出一组点,求在同一条直线上的点的最大数。思路:首先记录下重合的点的数目,和斜率不存在时,处于同一条直线上的点的数目。之后使用HashMap数据结构来存储和这个点各个斜率上点的个数。统计完

2017-11-01 15:23:05 245

原创 剑指offer-66题 机器人的运动范围

题目: 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路: 此题的思路和上一道题很像,都用到了DF

2017-10-28 12:43:32 247

原创 剑指offer-65题 矩阵中的路径

题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了

2017-10-27 16:31:51 258

原创 剑指offer-64题 滑动窗口的最大值

题目: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,

2017-10-27 08:43:47 299

原创 剑指offer-63题 数据流的中位数

题目: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 思路: 定义两个优先队列即PriorityQueue,一个作为大顶堆另一个作为小顶堆。这里需要说明下自己最近对于堆的理解,以前一直以为堆和集合一样是一群无序的数据,但是自从做了这道题之后开始有了对堆更

2017-10-25 16:18:07 267

原创 剑指offer-62题 二叉排序树第k个节点

题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。 思路: 二叉搜索树的中序遍历其实就是其中各个节点按照从小到大的顺序进行排序。因此可以考虑使用二叉树中序遍历的方法来解此题。详细可参考二叉树中序遍历的递归与非递归写法。二叉树的中序遍历分为递归与非递归两种方式。无论采用哪种方式都需要设置好一

2017-10-23 18:14:26 551

转载 Mongo查询操作

Mongo查询操作使用find()方法,find()方法查询的结果以非结构形式展示给用户。 语法格式db.collection.find(query,projection)参数说明: 参数 参数说明 query 可选,使用查询操作符指定的查询条件 projection 返回投影操作符返回的键。默认情况下返回所有的键。使用pretty方法进入易读模式。MongoDB 的 fi

2017-09-01 15:29:57 373

转载 Mongo删除文档

MongoDB使用remove函数来移除集合中的数据。 一个比较好的习惯是在执行remove函数之前先使用find函数来查看要删除的数据是否存在。 remove方法的基本语法格式db.collection.remove( <query>, { <justOne>:<boolean>, <writeConcern>:<document>

2017-09-01 15:20:23 406

转载 Mongo更新文档操作

Mongo使用update和save方法来更新集合中的文档。 语法格式:强调内容db.collection.update(<query>,<update>, { upsert:<boolean>, multi:<boolean>, writeConcern:<document> }) 参数 参数说明 query update的查询条件,类似sql中

2017-09-01 15:09:47 401

转载 Mongo插入文档操作

Mongo文档的数据格式和JSON相同,叫做BSON全称为Binary JSON。BSON是一种二进制格式的存储方式。 MongoDB使用insert和save方法将数据插入数据库中。db.COLLECTION_NAME.insert(document)实例 说明:db后的mango是集合名,若数据库中不存在集合名为mango的集合,数据库将自动创建一个名为mango的集合,之后再执行插入数

2017-09-01 14:06:19 488

原创 使用Mongo创建一个新的数据库的步骤

在MongoDB下创建数据库的方法跳转到MongoDB所在的目录下。C:Users\Administrator\d:创建一个data目录并进入其中mkdir data创建数据库文件db并进入其中mkdir db命令行下运行MongoDB服务器mongod --dbpath d:\data\db启动MongoDB服务的方式D:\MongoDB\bin>mongod --logpath D:\Mongo

2017-09-01 11:36:03 1700

原创 Java反射

反射的定义:能够分析类能力的程序称为反射。 一、Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行类型信息选择相应的方法执行。保存这些信息的类被称为Class,Object类的getClass()方法将会返回一个Class类的实例。 例:Employee e;Class c1=e.getClas

2017-05-19 16:24:41 347

原创 数据库的安全性

数据库的特点之一就是由数据库管理系统提供统一的数据保护功能来保证数据的安全可靠和正确有效。数据库的数据保护功能主要包括数据的安全性和完整性。数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。系统安全保护措施是否有效是数据库系统的主要技术指标之一。数据库的不安全因素 1、非授权用户对数据库的恶意存取和破坏。 数据库管理系统提供的安全措施主要包括用户身份鉴别、存取控制

2017-05-19 15:01:35 800

原创 Myeclipse中Package的错误

可以选用较低版本的sdk,比如我就用回1.6版本的sdkwindow->preferences->Java->Installed JREs->Add 选择一个低版本的sdk目录

2017-04-04 19:49:01 2521

原创 视图

视图是从一个或多个基本表中导出的表。是一个虚表。数据库中只存放视图的定义,不存放视图中相应的数据。一旦数据发生了变化,视图中的数据也会发生相应的变化。 视图一经定义,就同基本表一样可以查询,删除,更改。视图不仅可以建立在一个或多个基本表上,也可以建立在多个视图上或多个视图和多个基本表上,也可以在视图上定义一个新的视图对新的视图进行CURD操作。一、定义视图 SQL语句建立视图的一般格式Creat

2017-04-01 10:42:56 832

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除