自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Alan-zzx的博客

燕雀安知鸿鹄之志哉

  • 博客(76)
  • 收藏
  • 关注

原创 IDEA中的Gradle设置国内地址下载依赖包,不需要在项目gradle文件中配置

在USER_NAME/.gradle文件夹下新建文件init.gradle,如C:\Users\Alan\.gradle\init.gradle打开文件使用以下配置下载路径:buildscript { repositories { // 这里优先从阿里云镜像仓库下载所需的依赖 maven { url "https://maven.aliyun.com/repository/google" } maven { url "https://maven.a

2020-06-05 13:49:26 1814

原创 十三、MySQL数据库的锁,全局锁、表锁和行锁的应用

锁是在处理并发访问数据时,用于定义访问规则的数据结构。MySQL 中的锁根据作用范围分类有全局锁,表级锁和行锁。全局锁当你需要对数据库进行整库备份时,为了保证备份时刻的所有数据一致性,需要确保数据库在备份期间不进行数据更改操作。考虑一般情况做数据备份时,正在进行下单的业务,假设有一个下单完成商品表和已付款金额表,下单完成的操作包含在商品表添加商品和在金额表记录是否付款。此时,操作的顺序是:①备份下单商品表,②下单付款,③备份已付款金额表。若数据库崩溃恢复数据,则导致数据不完整,也就是商品已经下单完成

2020-06-04 17:30:28 366

原创 freeswitch通过lua脚本实现多方会话功能,包括会议录音自动外呼等

freeswitch 会议模块freeswitch 自带有多方会议功能,在安装目录下的conf/autoload_configs/modules.conf.xml中,开启会议功能,通常默认是启用的,默认的 dialplan 配置下,注册分机拨3000即可进入默认配置的会议功能。这里的 3000 指的是会议号码,多个分机都拨这个号码即可进入同一个会议。会议模块相关配置会议模块同样也有对应的全局...

2020-01-01 16:48:52 4235

原创 ODBC连接MySQL数据库查询报Segmentation fault错误的解决方案

安装odbcyum install unixODBC-devel mysql-connector-odbc配置mysql数据库连接/etc/odbc.ini[freeswitch]DRIVER = MySQLSERVER = 127.0.0.1PORT = 3306DATABASE = freeswitchUSER = rootPASSWORD = 12...

2019-12-16 16:16:09 1278

原创 freeswitch源码定制功能,Linux下编译安装和使用

环境准备CentOS系统需要安装gcc查看是否已安装:rpm -qa | grep gccgcc -v安装命令:yum install -y subversion autoconf automake libtool gcc-c++yum install -y ncurses-devel make libtiff-devel libjpeg-develfreeswitch 源码包...

2019-12-12 22:03:38 932 1

原创 解决eclipse切换jdk编译版本不起作用的问题

出现 BUG 的 eclipse 版本:Version: Mars Release (4.5.0)Build id: 20150621-1200BUG 描述java 项目使用的 JDK 版本为 1.8,由于 Linux 环境下 JDK 版本是 1.7,想要导出符合要求的 Jar 包,则需要将该项目的编译版本调整为 JDK 1.7,但是在 eclipse 中调整后依旧不起作用。项目中使用...

2019-09-27 02:45:35 1316

原创 业务开发性能问题,循环中不使用+拼接字符串、不操作数据库

循环拼接字符串使用 StringBuilderpublic String fun2(String[] arr) { StringBuilder res = new StringBulider(); for(int i=0; i<10; i++) { res.append(arr[i]); } return res.toString();}...

2019-09-24 16:25:56 190

原创 MySQL数据类型隐式转换规则

两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换两个参数都是字符串,会按照字符串来比较,不做类型转换两个参数都是整数,按照整数来比较,不做类型转换十六进制的值和非数字做比较时,会被当做二进制串有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会...

2019-09-10 16:07:26 437

原创 十二、MySQL索引模型和存储、运作规则

在日常开发过程中,一条查询语句面对的数据量过大时,查询的时间就会很长,通常这个时候最方便也最有效的做法就是根据查询语句给表建一个索引,查询效率则会成倍的提高。数据库的索引,类似新华字典的目录,新华字典有不止一个目录,有拼音目录和笔画目录等,查找某个字的时候,根据实际情况选择不同的一个或多个目录可以快速找到该字的位置,如果没有目录,那查找效率是无法想象的。同样的,数据库表也是同新华字典一样的存在,...

2019-09-07 22:33:54 232

原创 十一、MySQL实现事务的隔离:回滚日志(undo log)

事务的隔离级别事务(Transaction)的存在是要保证一组数据库的操作全部成功或全部失败。例如在转账的时候,简单的说存在多步操作,查询余额,自己账户做减法,对方账户做加法,这几步操作必须全部成功或者全部失败,并且在事务的执行过程中数据被锁住,不会让其他事务再对数据进行更改。MySQL 是一个支持多引擎的数据库系统,并且事务都在引擎中实现。其中 MyISAM 引擎不支持事务,我们以 Inno...

2019-08-24 21:37:29 1669

原创 binlog 与 redo log 的区别

binlog 写入机制我们知道 redo log 的写入机制是事务中有更新操作时就会将更新操作记录在 redo log buffer 中,在事务提交时,根据相关参数的设定,按照不同逻辑持久化到磁盘文件。binlog 区别于 redo log,每个事务所在的线程都会存在一个 binlog cache,并且只有事务提交时会持久化到磁盘文件(binlog file)。注意磁盘文件是共用的,只有 bi...

2019-08-14 23:26:08 870

原创 为什么从 redo log buffer 刷入 redo log file 不是一次磁盘 IO 操作

redo logredo log的作用就像是在记账时的临时小账本,先临时记录某人的账目变化情况,在之后将这个变化记录到真正的账本中。如此一来当需要记账的人很多时可以提高效率(比从账本中查找某人再记录效率高)。在 MySQL 中,如果没有 redo log 更新语句成本最高的地方就是每次都要从表中找到对应数据行并对其修改,这一次次的磁盘 IO 操作是最耗时的,因此 redo log 的出现提高了...

2019-08-13 21:47:30 1597

原创 十、MySQL redo log 和 bin log 概述

UPDATE test SET name = 'abc' WHERE id = 1;更新语句的执行流程与查询语句类似,同样是需要经过下图的流程。首先清空对应表的缓存,经过分析器,优化器,执行器最终操作存储引擎修改表中数据。除此之外,MySQL为了保证在高并发更新数据时的效率以及数据的恢复能力,引入了两个日志模块,redo log和bin log。redo logredo log实际上是...

2019-07-29 13:51:04 477

原创 MySQL内置函数——数学函数

MySQL中的数学函数,通常参数为整型,若参数为字符串,大多数情况会将字符串转型成整型计算。若无法转换成整型则会出现意外的结果。参数为NULL时,返回值为NULL。常见数学函数abs(n)返回n的绝对值sign(n)返回参数的符号(为-1、0或1)mod(n,m)取模运算,返回n被m除的余数(同%操作符)floor(n)返回不大于n的最大整数值ceiling(n)返回不小于...

2019-07-24 23:28:01 580

原创 九、MySQL基础架构概述

MySQL基础架构SELECT * FROM student WHERE stu_id = 007;这样一条简单的 SQL 语句,可以从 student 表中查询得到 stu_id 为 007 的数据,学会写 SQL 语句后,在使用数据库时,只能观察到数据库执行了 SQL 语句,并且返回了所需要的数据。那么,MySQL 在拿到 SQL 语句之后做了哪些操作呢?这涉及到 MySQL 的基础架...

2019-07-22 16:29:44 498

原创 MySQL内置函数——关于时间戳转换和计算函数

MySQL内置关于时间戳的计算和转换函数介绍TIMESTAMP函数语法:TIMESTAMP(datetime_expr)TIMESTAMP(datetime_expr,int_expr)说明:一个参数时,是将datetime_expr转换成时间戳格式(timestamp),两个参数时,是将datetime_expr转换成时间戳并加上int_expr使用举例:mysql> s...

2019-07-21 00:32:43 858 1

原创 八、MySQL数据库高级操作

数据库的备份与还原数据的备份:mysqldump命令mysqldump -u username -p password dbname [tbname1 [tbname2...]] > filename.sql还原数据库:mysql命令或者source命令mysql -u username -p password [dbname]<filename.sql//注意:应先新建空...

2019-07-20 23:30:44 289

原创 七、MySQL视图语法基础

视图是从一个或多个表中导出来的表,是一种虚拟存在的表,并且表的结构和数据都依赖于基本表。通过视图可以看到基本表中的数据,也可以像操作基本表一样操作视图,进行增删改查。可以简化查询语句,具有更高的安全性,逻辑数据独立性。视图管理创建视图语法格式CREATE [OR REPLACE] [ALGORITHM] = {UNDEFINED或者MERGE或者TEMPTABLE}VIEW view_na...

2019-07-18 17:03:48 664

原创 六、MySQL事务与存储过程

JDBC事务控制事务概述:指逻辑上的一组操作,组成这组操作的各个单元,要么全成功,要么全部不成功。举例说明:银行中要将A账户中转100元到B账户,这两步操作必须都成功或都不成功update account set money = money-100 where name='A';update account set money = money+100 where name='B';控制...

2019-07-17 14:00:31 432

原创 五、SQL多表查询语法

外键可以明确的声明表和表之间的字段的关系,使数据库帮我们维护这种关系,这就是外键。如果一个操作破坏这种外键约束,则数据库会阻止这个操作。为表添加外键创建表的时候声明外键FOREIGN KEY(ordersid) REFERENCES ORDERS(id);--例如:为职员表添加外键关联部门表create table dep( id int primary key auto_i...

2019-07-16 09:43:16 1034

原创 四、SQL单表查询语法

简单查询SELECT语句SELECT [DISTINCT] *或者{column1,column2...} FROM table_name;//DISTINCT表示去除重复项,*表示查询所有记录或者指定查询的列名--例一:查询学生表中的数据(学生表:id,name,math,chinese,english)select * from student;--例二:查询表中所有学生姓名和...

2019-07-12 16:52:58 429

原创 二十三、泛型语法基础详解

泛型概述一般的类和方法,只能使用具体的类型,如基本类型(int,double等),或者自定义的类。如果想要编写更为通用的代码,这种形式会带来一定的束缚。Java 中的多态实际上已经可以实现一些场景下的通用代码编写,但是多态必须基于继承体系,这使得它也会受一定束缚。一个方法参数为某个接口,那么我们可以将这个接口实现的所有类的对象作为参数,而其他没有实现这个接口的类则无法作为参数。Java SE...

2019-07-11 21:32:39 383

原创 三、数据的增删改操作

添加数据--语法INSERT INTO table_name [(column [,column...])] VALUES (value [,value...]);例一:在员工表中插入一条数据(id,name,gender,birthday)insert into employee (id,name,gender,birthday) values (null,'张飞','m','1999...

2019-07-11 15:40:46 329

原创 二、数据库和表的基本操作

操作数据库创建数据库//创建数据库,并先检查是否已经存在,可省略不检查CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,...]]//创建的条件create_specification: [DEFAULT]CHARACTER SET charset_name指定数据库采用的字符集 [DEFAU...

2019-07-09 22:15:33 353

原创 SpringBoot+Vue.js项目中使用Spring Security+JWT实现登录权限控制

目标和需求我们的目的是在 SpringBoot+Vue.js 这样的前后端分离的项目中增加一个登录权限控制模块。这个模块的需求如下:包含多个角色,每个角色所具有的权限不同(可以看到不同的菜单和页面)对整个系统做登录控制,即未登录强制跳转到登录页面登出功能实现方案:登录控制使用 Spring Security 框架,登录控制使用 JWT 实现,登录成功后使用 JWT 生成 token...

2019-07-09 21:25:02 6852 1

原创 一、MySQL数据库入门

数据库概述数据库(DataBase) 是按照数据结构来组织、存储和管理数据的仓库。数据结构化:在数据库中的数据不只是针对某个应用,而是面向全组织,面向整体的。实现数据共享:可以被多个应用程序,多个用户共享使用,大大减少数据冗余,节约存储空间数据独立性高:包括逻辑独立性和物理独立性,前者是指数据的逻辑结构和应用程序相互独立,后者是指数据的物理结构变化不影响数据的逻辑结构数据统一管理与控制...

2019-07-09 15:37:47 153

原创 二十二、运行时类型信息进阶:反射与动态代理

反射反射是作用于类型信息的,从字面上理解容易想到有反必有正,对于类型信息的操作,常规情况当然是直接拿到这个类,从而创建对象,使用对象。那么相对的,反其道而行之会怎么样呢?首先我们可以在编译时不知道具体的类,甚至是类的原始信息,其次我们应该是通过某种通用工具在运行时去获取类的信息,进行分析拆解和使用。反射所使用的工具 Java 类库中已经提供,在 java.lang.reflect 包下,结合...

2019-07-04 21:18:56 116

原创 二十一、运行时类型信息表示:RTTI

RTTIJava 作为面向对象编程语言,运行时的类型信息(RTTI)可以解决很多面向对象编程时的问题。例如现在有一个基类Shape,子类Circle、Square和Triangle均继承自基类Shape,我们可以使用基类的引用来达到一些操作,这样的话如果有扩展新的子类,也不会存在任何问题。这个例子中最大的问题就是为什么我们可以用基类的引用来操纵子类对象,JVM 是如何得知基类和子类的继承关系...

2019-07-02 22:20:49 166

原创 二十、内容输入解析器:Scanner

扫描输入文本内容一段程序,可以处理很多类型的数据,因此,在程序开始的阶段,必须要有数据源,简单的情况可以是从控制台输入,也可能是从文本读取,亦或者直接定义字符串读取。在读取文本内容时,如何进行区分各种数据类型呢?因为文本内容均是以字符串存储,若是以字符串读入,那必定需要进行分词,如下代码所示,比较麻烦:public class test { public static Buffere...

2019-04-28 22:12:50 225

原创 十九、字符串的格式化输出与正则表达式

格式化输出在 C 语言中,使用 printf 函数将字符串输出到控制台,而 printf 函数支持格式化输出,例如:int main(){ int arr[1,2,3,4,5]; for(int i=0; i<5; i++){ printf("%-4d",arr[i]); }}/*output:1 2 3 4 5 */...

2019-04-25 21:12:12 1251

原创 十八、为什么在循环中使用运算符+拼接字符串性能低下

String 类型Java 中自带 String 类型,用于存储字符串,在操作字符串的时候,String 对象实际上是不变的,有点类似 final 修饰的效果。public class test { public static void main(String[] args) { String a = "abc"; String b = fun(a);...

2019-04-16 21:50:23 472

原创 十七、浅析Java异常机制

捕获所有异常Java 中异常的超类是 Throwable 类,而除运行时异常外,程序能抛出的异常都属于 Exception 类的子类,因此可以使用 Exception 类来捕获所有程序中抛出的异常。Exception 类自身以及继承自 Throwable 类的常用方法的使用如下:public class text { public static void main(String []...

2019-04-11 22:26:28 210

原创 十六、使用自定义异常来定义程序中的错误

概述不管是大型网站、应用还是一个几十行的程序,运行时都会出现一些问题,有的问题比较严重可能导致服务器宕机,而有的问题,并不会导致服务器宕机,但是若是处理不当,很可能会产生数据库数据紊乱,从而发生未知的问题。针对后一种问题,Java 使用了异常来正确处理这些问题。单独使用异常通常可以使错误处理代码简化。相比较而言,C 语言的异常处理并不属于语言本身的一部分,而是需要开发者们约定俗称一套机制,例如...

2019-03-20 21:09:02 487

原创 海量数据下的查询优化手段:索引

概述在讲 B+ 树的时候,说到 MySQL 底层依赖 B+ 树作为构建索引的数据结构。在实际开发中,即便是再复杂的业务,也逃不出增删改查这四种操作,可以抽象的理解为是对数据的存储和计算,当面对海量数据时,性能就成了最重要的指标之一,而索引是提高性能的关键手段。那么何为索引(index)呢?其实很简单,我们平时看的书或者词典通常都有目录,这个目录就是一个典型的索引,通过目录,可以快速定位到我们...

2019-03-14 20:48:41 530

原创 十五、持有对象__Java容器体系

概述Java 类库中的各种容器类是最常用的类之一,上图中展示了 Java 容器类体系结构,其中虚线框代表接口,实线框代表类,实心箭头表示一个类的对象可以产生另一个类的对象,例如 Map 集合可以通过方法得到集合中的键的集合或值的集合。通常容器类分为两个体系和一组工具类:Collection 体系Map体系Collections 和 Arrays 工具类在程序开发中,需要的对象数量...

2019-03-12 22:47:21 183

原创 十四、内部类详解(下)

为什么要使用内部类一般情况,内部类是一个接口或者类的实现,并且可以作为外围类的一个窗口,即通过内部类对象提供的接口方法操作外围类私有的成员。如果只是需要实现一个接口,那么为什么不直接用外围类实现该接口,而需要使用内部类呢?这个问题其实说明了我们在选择的时候,是选择直接实现接口,还是使用内部类,实际情况下,如果通过直接实现接口比较方便,那么就不用内部类。现在我们只考虑内部类实现方式,这个方式...

2019-03-05 23:22:57 163

原创 A-star 算法原理分析

搜索算法图论中,应用最广泛的就是搜索算法了,比如,深度优先搜索、广度优先搜索等。在介绍 Dijkstra 算法那篇中,除了深度优先、广度优先这种暴力搜索算法,还有一些最短路算法也可以求得最短路径,并且效率比深度、广度优先搜索高。在一些大型网络游戏中,往往存在一种场景,游戏中的你需要从当前位置走到目的地,而你只需要在地图中找到目标位置,点击即可自动寻路走过去,那么这个自动寻路的功能是怎么实现的呢...

2019-02-28 21:32:14 19966

原创 十三、内部类使用详解(上)

概述将一个类的定义放在一个类的内部,这就是内部类。内部类可以实现将一些逻辑相关的类组合在一起,并且可以控制类中的类的可视性。举个栗子,在面向对象思维中,一个类即是一种类型,用类可以定义对象,现实中任何事物都可以被抽象为类与对象,例如,我们平时用的计算机,可以抽象为computer类,如果想要一台计算机,则new一个即可,这里我们要关注的是这个类的组成,现实中,计算机由各种零件组成(CPU、内存...

2019-02-27 22:33:24 200

原创 MySQL数据库索引原理:B+树原理分析

数据库索引在实际开发中,通常数据都是存储在数据库中,主流的比如 MySQL,Orcale等。数据库中的索引是提高数据库查询效率的有效手段之一,那么索引是如何实现的呢?为了简化问题,我们将索引的问题抽象出来,常见的数据库操作中,有如下两条 SQL 语句:select * from student where student_id = 20182937select * from studen...

2019-02-25 21:59:18 890

原创 推荐系统算法原理:向量空间和欧几里得距离的应用

概述现在我们使用的一些APP都有智能推荐功能,例如抖音能够根据你的口味推荐符合你口味的短视频,网易云音乐每天会有大约三十首歌曲推荐给你,其中的私人FM功能则可以无限推荐符合你口味的歌曲,各种购物APP中,也会根据你浏览过的商品推荐你可能需要的商品。那么以上这些精准推荐是如何做到的呢?它底层的算法原理是什么呢?简单的推荐系统底层的基础原理是线性代数中的向量空间,以及欧几里得距离。向量空间向...

2019-02-20 22:48:16 2554

空空如也

空空如也

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

TA关注的人

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