线性表
前言下面几节都来认识线性表,模拟Java中的顺序存储结构和链式存储结构的实现。 线性表(linear list)线性表是n个类型相同数据元素的有限序列,通常记作(a 0 , a 1 , …a i-1 , a i , a i+1 …,a n-1 )。 1.相同数据类型 在线性表的定义中,我们看到从a 0 到a n-1 的n个数据元素是具有相同属性的元素。比如说可以都是数字,例如(23, 14, 66, 5, 99);也可以是字符,例如(A, B, C, … Z);当然也可以是具有更复杂结构的数据元素,例如学生、商品、装备。相同数据类型意味着在内存中存储时,每个元素会占用相同的内存空间,便于后续的查询定位。 2.序列(顺序性) 在线性表的相邻数据元素之间存在着序偶关系,即a i-1 是a i 的直接前驱,则a i 是a i-1 的直接后续,同时a i 又是a i+1 的直接前驱,a i+1 是a i 的直接后续。唯一没有直接前驱的元素a 0 一端称为表头,唯一没有后续的元素a n-1 一端称为表尾。除了表头和表尾元素外,任何一个元素都有且仅有一个直接前驱和直接后继。 3.有限 线性表...
算法的基本概述
前言今天来看一哈算法的相关概念。 算法的基本概述算法(algorithm)算法是指令的集合,是为解决特定问题而规定的一系列操作。它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出。一个算法通常来说具有以下五个特性: 输入:一个算法应以待解决的问题的信息作为输入。 输出:输入对应指令集处理后得到的信息。 可行性:算法是可行的,即算法中的每一条指令都是可以实现的,均能在有限的时间内完成。 有穷性:算法执行的指令个数是有限的,每个指令又是在有限时间内完成的,因此整个算法也是在有限时间内可以结束的。 确定性:算法对于特定的合法输入,其对应的输出是唯一的。即当算法从一个特定输入开始,多次执行同一指令集结果总是相同的。 简单的说,算法就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是算法的逻辑形式,后者是算法的代码形式。 举例:如何求0+1+2+3+...10000=? 算法1:依次相加 while do-while for 算法2:高斯解法:首尾相加*50 或着梯度算法:(上底+下底)*高/...
数据结构的基本概述
前言从今天开始,我们就来巩固一下数据结构和算法的基本知识。 数据结构的基本概述有哪些数据结构?线性表、栈、队列、(字符)串、数组、广义表、树、二叉树、图。重点是线性表、二叉树 什么是数据数据(data)是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。数据的含义非常广泛,除了通常的数值数据、字符、字符串是数据以外,声音、图像等一切可以输入计算机并能被处理的都是数据。例如:除了表示人的姓名、身高、体重等的字符、数字是数据,人的照片、指纹、三维模型、语音指令等也都是数据。 数据项数据项(data item)具有原子性,是不可分割的最小数据单位。如:描述学生相关信息的姓名、性别、学号等都是数据项;三维坐标中的每一维坐标值也是数据项。数据项具有原子性,是不可分割的最小单位。 数据元素数据元素(data element )是数据的基本单位,是数据集合的个体,通常由若干个数据项组成,在计算机程序中通常作为一个整体来进行处理。例如:一条描述一位学生的完整信息的数据记录就是一个数据元素;空间中一点的三维坐标也可以是一个数据元素。 数据对象数据对象(data object )是性质...
展开运算符与rest参数
前言这周在工作中遇到了vue.js中的对象展开运算符的语法,有点没搞懂。现在记录学习一下。这里主要学习一下,ES6的rest参数,展开运算符(对象展开运算符、数组展开运算符、函数展开运算符),感觉它们有点相似。 rest参数 (剩余参数)剩余参数的语法:允许我们将一个不定数量的参数表示为一个数组。 语法: function(a, b, ...theArgs) { // ... } 由于JavaScript函数允许接收任意个参数,于是我们就不得不用arguments来获取所有参数: function foo(a, b) { var i, rest = []; if (arguments.length > 2) { for (i = 2; i<arguments.length; i++) { rest.push(arguments[i]); } } console.log('a = ' + a); console.log('b = ' + b)...
try-with-resources机制
Java7提供了try-with-resources机制,其类似Python中的with语句,将实现了java.lang.AutoCloseable 接口的资源定义在 try 后面的小括号中,不管 try 块是正常结束还是异常结束,这个资源都会被自动关闭。 try 小括号里面的部分称为 try-with-resources 块。 Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自动资源管理。 使用try-with-resources机制的代码如下所示: public static String readFirstLineFromFile(String path) throws IOException { try (BufferedReader reader = new BufferedReader(new FileReader(path))) { return reader.readLine(); } } 在Java7之前,只能...
Git合并特定commits到另一个分支
前言这周遇到一个使用git有点特别的操作。如何从一个分支合并特定的commits到另一个分支。有时候只合并你需要的那些commits,不需要的commits就不合并进去了。平常都很少遇到这样的情况,所以查了一下资料,记录一下。 合并某个分支上的单个commit使用git log或查git log --graph --pretty=oneline --abbrev-commit 查看提交的信息,记住commit id. git checkout [branch-name] 切换到合并的分支 git cherry-pick <commit-id> 把某个commit id提交合并到当前分支 如: dd2e86 - 946992 -9143a9 - a6fd86 - 5a6057 [master] \ 76cada - 62ecb3 - b886a0 [feature] 比如,feature 分支上的commit 62ecb3 非常重要,它含有一个bug的修改,或其他人想访问的内容。无论什么原因,你现在只需要将62ecb3 合并到master,而不合并...
Integer类型的值比较大小
前言这个星期在写代码的时候发现一个问题,这个问题以前我都没有注意过,就是关于Integer类型或int类型的值的比较。 Integer大小比较问题描述一下面演示,我出现的问题: public class DemoApplication { public static void main(String[] args) { Integer code = 530000; City city = City.init(); Integer c_code = city.getCode(); if (c_code == code) { System.out.println("结果:true"); } else { System.out.println("结果:false"); } } static class City { private Integer id; ...
vscode的debug的基本使用
前言最近一直在写vue.js代码,一直想找一款比较好一点的编辑器,用过WebStorm、IDEA、HBuilder、SublimeText3编辑器。刚开始常使用WebStorm,觉得它功能特别强大,但是收费,占用内存有点高。后来我就使用了vscode,它小巧,免费,更少的内存和CPU占用率等等。今天就来简单介绍一下vscode的debug模式的使用。 vscode的debugger环境是分为Chrome和Node的。 如何在Chrome环境下,使用vscode debugger进行代码调试?第一步,我们需要安装插件Debugger For Chrome,因为vscode里面是没有内置调试Chrome的模块的,需要单独安装 第二步,打开vscode调试区域,然后点设置 然后,选Chrome 进入了launch.json文件,修改一下配置 { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attr...
MySQL基本优化
MySQL如何优化表的设计合理化 (符合 3NF) 添加适当索引 (index) [ 四种 : 普通索引 、主键索引、唯一索引unique 、全文索引] SQL语句优化 分表技术 (水平分割 、垂直) 读写 [写: update/delete/add]分离 存储过程 [模块化编程,可以提高速度 ] 对mysql配置优化[配置最大并发数 my.ini, 调整缓存大小] mysql服务器硬件升级 定时的去清除不需要数据 ,定时进行碎片整理(MYISAM) 数据库范式什么是数据库范式为了建立冗余较小、结构合理的数据库,设计时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定范式。 数据库三大范式第一范式:1NF是对属性的原子约束,要求(列)具有原子性,不可再分解。(只要是关系型数据库都满足 1NF) 第二范式:2NF是对记录的唯一性约束,表中的记录是唯一, 就满足2NF, 通常我们设计一个主键来实现,不能包含业务逻辑。 第三范式:3NF是对字段冗余性的约束,它要求字段没有冗余。 没有...
Java8之Lambda表达式
Lambda表达式介绍Lambda表达式Lambda表达式是 Java8 中最重要的新功能之一。使用 Lambda 表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看起来更简洁易懂。Lambda表达式同时还提升了对集合、框架的迭代、遍历、过滤数据的操作。 Lambda表达式特点1、函数式编程;2、参数类型自动推断;3、代码量少,简洁 Lambda表达式好处1、更简洁的代码;2、更容易的并行 Lambda表达式使用场景任何有函数式接口的地方 Lambda表达式示例1234567891011121314151617181920212223//匿名内部类方式 new Thread(new Runnable() { @Override public void run() { System.out.println("thread run"); } }).start(); //lambda表达式方式 new Thread(() -&...