现在位置: 首页 > admin发表的所有文章
  select count( *)应该是一个比较常用的语句,用来统计记录行数。但是,慢慢地你会发现,这个语句越来越慢了,为什么呢?   MySQL 中,不同的存储引擎,count( *)的实现方式是不同的。   1、MyISAM 引擎,比较简单粗暴,直接将表的总行数存储在磁盘上,因此效率很高;   2、InnoDB 引擎中,执行count(*)时会遍历全表,需要一行行的把数据查出来,因此性能较差;   为啥 MyISAM 就可以这样做呢?因为它不支持事务啊,不用担心数据不一致的问题,因此可以快速返回count(*)。   假设,表 t 中有 1000 条数据,有下面三个用户......
阅读全文
  • 02月
  • 21日
数据库 ⁄ 共 2405字 评论关闭
  数据库有很多,比如MySQL、oracle等到,但是每个数据的操作都差不多,今天我们就来看下oracle数据库的维护是怎样的。   一、SQL   1.SQL-Structured Query Language 结构化查询语言,数据库的查询和程序设计语言,由ISO标准化组织发布。   2.SQL是面向集合的操作,只描述需求,不考虑过程,如何完成由DBMS负责解决。   3.SQL包括DDL语言和DML语言   ①create table 、alter table、drop table和truncate table等属于DDL语言。   ②insert、update、delete和select等属于DML语言。   二、最常用的运算符和函数   1......
阅读全文
  • 02月
  • 21日
编程语言 ⁄ 共 2429字 评论关闭
  很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。   那么,什么是指针,为什么大家都想避开指针。   很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。   指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起。   宏观看来,计算机可以分为两类:   存储-执行计算机。   这类机器典型的例子就是我们平时使用的计算机,有一个CPU,有一个内存,CPU仅包含运算逻辑,所有......
阅读全文
  • 02月
  • 21日
架构设计 ⁄ 共 3425字 评论关闭
  接口转回成具体类型   接口实例中可以存放各种实现了接口的类型实例,在有需要的时候,还可以通过ins.(Type)或ins.(*Type)的方式将接口实例ins直接转回Type类型的实例。   var i int = 30 var ins interface{} // 接口实例ins中保存的是int类型 ins = i   x := ins.(int) // 接口转回int类型的实例i println(x) //输出30   但注意,这时候的i和x在底层不是同一个对象,它们的地址是不同的。   var i int = 30 var ins interface{}   ins = i   x := ins.(int) println("i addr: ",&i,"x addr: ",&x)  ......
阅读全文
  • 02月
  • 21日
算法 ⁄ 共 3749字 评论关闭
  为什么需要倒排索引   倒排索引,也是索引。   索引,初衷都是为了快速检索到你要的数据。   每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不同的使用场景和数据结构,需要用不同的索引,才能起到最大化加快查询的目的。   对 Mysql 来说,是 B+ 树,对 Elasticsearch/Lucene 来说,是倒排索引。   Elasticsearch 是建立在全文搜索引擎库 Lucene 基础上的搜索引擎,它隐藏了 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API,不过掩盖不了它底层也是 Lucene 的事实。......
阅读全文
  • 02月
  • 21日
综合 ⁄ 共 1912字 评论关闭
  首先,我们需要弄清楚几个概念:同步和异步,阻塞和非阻塞。   一、同步和异步   1. 同步   进程触发 IO 操作的时候,必须亲自处理;   比如你必须亲自去银行取钱。   2. 异步   进程触发 IO 操作的时候,可以不亲自处理,它把操作委托给 OS 处理,委托的时候需要告知数据的地址和大小,然后自己去做别的事情,当 IO 操作结束后会得到通知;   比如你把银行卡给我,让我帮你去银行取钱,你需要告诉我银行卡密码和取多少钱,我取完了之后把钱给你。   3. 总结   自己干就是同步,别人干就是异步。   二、阻塞......
阅读全文
  • 02月
  • 21日
数据库 ⁄ 共 11009字 评论关闭
  案例:   CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄', `position` varchar(20) NOT NULL DEFAULT '' COMMENT '职位', `hire_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入职时间', PRIMARY KEY (`id`), KEY `idx_name_age_position` (`name`,`age`,`position`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='员工记录表';INSERT INTO ......
阅读全文
  • 02月
  • 21日
综合 ⁄ 共 3437字 评论关闭
  Web容器对异步的支持   SpringMvc的实质就是对Java Web的封装,因此为了更容易的理解SpringMvc的异步,必须先了解Java Web的异步。   Java Web的实质就是一套标准(接口),Web容器实现了这套标准,所以我们站在Web容器的立场来说Java Web的异步,非常好理解。   无论采用什么框架开发的Java Web应用,最终都是在Web容器中运行的,如tomcat就是最常用的Web容器。   启动SpringBoot时,可以看看日志中打印出的线程名称,其实就是tomcat线程池里的线程。可以多请求几次,发现每次处理请求的线程Id都不一样。   我们知道,......
阅读全文
  什么是boolean类型   布尔类型:布尔数据类型只有两个可能的值:真和假。使用此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这一点信息,但是它的“大小”并不是精确定义。   stackoverflow就有关于boolean占几个字节的讨论。 what-is-the-size-of-a-boolean-variable-in-java 其中有一个高赞回答:   class LotsOfBooleans{   boolean a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;   boolean b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;   boolean c0, c1, c......
阅读全文
  • 02月
  • 21日
综合 ⁄ 共 8416字 评论关闭
  在开始本篇文章的内容讲述前,先来回答我一个问题,为什么 JDK 提供一个 synchronized 关键字之后还要提供一个 Lock 锁,这不是多此一举吗?难道 JDK 设计人员都是沙雕吗?   初识 ReentrantLockReentrantLock 位于 java.util.concurrent.locks 包下,它实现了 Lock 接口和 Serializable 接口。   ReentrantLock 是一把可重入锁和互斥锁,它具有与 synchronized 关键字相同的含有隐式监视器锁(monitor)的基本行为和语义,但是它比 synchronized 具有更多的方法和功能。   ReentrantLock 基本方法构造方法   ReentrantLock......
阅读全文
  • 02月
  • 21日
云计算 ⁄ 共 992字 评论关闭
  很多东西都有所差异,你能总结出 synchronized 和 lock 锁的实现 ReentrantLock 有什么异同吗?   Synchronzied 和 Lock 的主要区别如下:   存在层面:Syncronized 是Java 中的一个关键字,存在于 JVM 层面,Lock 是 Java 中的一个接口   锁的释放条件:1. 获取锁的线程执行完同步代码后,自动释放;2. 线程发生异常时,JVM会让线程释放锁;Lock 必须在 finally 关键字中释放锁,不然容易造成线程死锁。   锁的获取: 在 Syncronized 中,假设线程 A 获得锁,B 线程等待。如果 A 发生阻塞,那么 B 会一直等待。在 Lock 中......
阅读全文
  • 02月
  • 21日
综合 ⁄ 共 2845字 评论关闭
  现在的Spring相关开发都是基于SpringBoot的。   最后在打包时可以把所有依赖的jar包都打进去,构成一个独立的可执行的jar包。   使用java -jar命令就可以运行这个独立的jar包。   这个jar包的执行入口就是一个main函数,典型的格式如下:   @SpringBootApplicationpublic class TasteSpringApplication { public static void main(String[] args) { SpringApplication.run(TasteSpringApplication.class, args); }}   从代码中可以得知,SpringApplication这个类就是SpringBoot的总入口。   以上这些内容,早已是路......
阅读全文