- 博客(34)
- 收藏
- 关注
原创 【MySQL】漫谈MySQL体系结构
背景 了解MySQL的架构图,对MySQL有一个整体的把握,对于以后深入理解MySQL是有很大帮助的。比如:很多查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行。 MySQL从概念上分为四层,如下图:这四层分别是网络连接层,服务层(核心层),存储引擎层,系统文件层。我们自顶向下开始讲解。网络接入层主要负责连接管理、授权认证、安全等等。 每个客户端连接都对...
2018-05-11 22:16:32
15686
10
原创 【JavaSE】Java包装类型的Cache机制
本文将介绍 Java 中 Integer 缓存(IntegerCache)的相关知识。这是 Java 5 中引入的一个有助于节省内存、提高性能的特性。首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为。接着我们将学习这种实现的原因和目的。
2018-05-06 10:38:07
1109
原创 【Laravel】Eloquent ORM的底层实现
动机首先来说一个Eloquent ORM的设计思想:Eloquent ORM就是将数据库中复杂的数据结果封装成更加smart的接口提供给用户使用。数据库中每一个表对应一个类,而类的实例对应数据库表中的一行记录,数据库中的列值会对应到类的属性上。一直在使用这个东西,之前并没有深入去了解过,借这个机会查阅了Laravel底层的源码。笔者的环境:Laravel5.5, Sublime
2018-01-21 19:07:42
3480
原创 【MySQL】MySQL数据类型宽度
MySQL中整数数据类型上图:MySQL的整数类型MySQL中数据类型的显示宽度显示宽度只是指明MYSQL最大可能显示的数字个数,数值的位数小于指定的宽度时会有空格填充,取决于你的设置。如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然可以插入显示出来。创建表时,可以在INT后面加入数
2018-01-09 21:33:14
3223
1
原创 【MySQL】SQL执行计划分析
MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain命令的使用及相关参数说明。
2018-01-09 09:15:30
27958
4
原创 【MySQL】常见的业务处理-删除重复数据
业务场景日常工作中我们经常会遇到这样的场景删除数据库中某个表中重复的数据。现在以一个案例驱动。需求:删除评论表中同一订单同一商品的重复评论,只保留最早的一条。上图是商品评论表查看是否存在重复评论查看是否存在对于一订单同一商品存在重复评论SELECT order_id, p
2018-01-08 23:51:55
2073
原创 【MySQL】常见的业务处理-分页显示
介绍分页在我们日常开发中是非常常见的需求,我们通常会用LIMIT加上偏移量的办法实现。但是大家有没有考虑过当偏移量大的时候分页SQL的执行效率呢?下面以一个例子来模拟优化的过程。业务需求有一个商品评论表结构如下:要求查询出某一个商品的前10条评论。我们写出的SQL可能会是这个样子
2018-01-08 23:50:29
880
原创 【MySQL】慢查询日志
什么是慢查询日志MySQL慢查询日志用于记录在MySQL中响应时间超过设置值long_query_time值的SQL,会被记录在慢查询日志中。默认情况下MySQL是不开启慢查询的,因为开启慢查询肯定会带来性能的影响,关于如何让开启慢查询日志请往下看。为什么需要慢查询日志我们不可能做到对所有的SQL都使用EXPLAIN语句来分析SQL的执行情况,使用慢查询
2018-01-08 23:48:46
1158
原创 【MySQL】常见的业务处理-进行分区间的统计
场景在日常工作中我们常常有这样的需求:统计所有数据区间的信息。案例:统计某个商城系统中所有登录用户消费金额大于1000元的,800到1000元的,以及800元以下的人数:用户登录表:商品订单表:MySQL中的函数条件判断函数函数作用CASE e
2018-01-08 23:42:40
8359
原创 【MySQL】分区表的使用
什么是分区表?在逻辑上为一个表,在物理上存储在多个文件中。所有的数据操作都会通过逻辑表转化成对存储引擎的接口调用,底层的物理表对于SQL层来说完全是一个暗箱操作。为什么要分区?将数据按照较粗的粒度存放在不同的表中,将关联的数据存放在一起,如果想批量删除整个分区非常方便。批量删除大数据量的数据可以采用清除整个分区的方式。比如我们后文中会提到的对每年的日志表
2018-01-07 20:27:23
1505
原创 【Laravel】数据库事务
最近公司项目集成了一个支付的模块。由于网络世界是不确定的。说不定哪个操作就出了问题。为了保证数据的正确性我们不得不考虑使用数据库事务这一特性。本做一个简单的Laravel数据库事务的介绍。
2017-12-20 21:35:44
4163
原创 【Laravel】项目中清除缓存失败
痛点我想清除缓存中所有的内容,在项目根目录下执行如下语句:php artisan cache:clean但是我再次获取缓存中的内容还是存在://之前缓存的内容还是存在 $unreads = Cache::get('unreads_' . $this->id);问题的解决思路让我们回到问题本质,缓存解决了什么问题:数据库的局限: 数据库连接
2017-12-15 16:03:51
1996
原创 【Laravel】初探Laravel框架中的源码(一)
写在前面的话: 最近利用下班的空余时间看了一下Laravel框架中的源码。发现他所用到的设计方法和理念都是已经存在的。之前使用JavaWeb的时候也常用到。所以最近我想通过对框架中源码的分析,进一步提高我对设计模式的理解。在Laravel中,服务容器是整个系统功能调度的核心,在JavaWeb中类似于ApplicationContext 。它提供了一系列在框架运行的过程中需
2017-12-09 12:16:07
548
原创 【Laravel】Laravel中命名规范
之前一直用Spring+Mybatis做WEB开发,由于公司的需要开始接触Laravel框架。不可否认确实被它所吸引,使用起来太优雅了。在这里不是说SSM这套解决方案不好,每个东西都有它存在的价值。Laravel使用起来这么优雅的原因我认为最大的原因是:约定优于配置。切入正题,使用规范的好处是让你编码更加清晰。数据库命名建议使用复数名词作为表名,例如 users。多对多关系中中
2017-11-30 20:49:42
5121
原创 【Laravel】Laravel使用总结(一)
写在前面的话:入职快半个月了,趟了许多坑。就这些天遇到的各类问题总结了一些Laravel 中一些小技巧。希望对大家有帮助,同时也方便以后查阅。1.数据库查询怎么统计一篇文章有多少评论?最快的方法是:$article = Article::where('id',1)->withCount('comments')->first();这样$article变量就
2017-11-26 11:29:14
2054
原创 Java 并发编程 之 线程池(四)
线程池常见使用场景 Web/数据库/文件/邮件 服务器请求来自远程的客户端请求数量很大, 任务执行时间较短一个请求一个线程创建线程,销毁线程的开销比较大太多的线程导致内存耗尽复用一个资源的技术,前提是请求数量很大, 任务执行时间较短线程池系统预先创建指定数量的线程对多任务重用线程, 线程创建的开销被分摊请求到来时, 线程已经存在, 立刻就可以服务通过限制线程池中的线程数量, 防
2017-10-01 23:52:16
291
原创 Java 并发编程 之 volatile(三)
不允许对 一个volatile变量的赋值操作与其之前的任何读写操作 重新排序,也不允许将 读取一个volatile变量的操作与其之后的任何读写操作 重新排序。
2017-10-01 17:36:56
258
原创 WEB安全
安全三要素全面认识一个安全问题,有很多方法,首先我们来理解安全问题的组成属性。安全属性的总结为安全三要素,简称CIA机密性(Confidentiality) 数据内容不能泄露手段:加密完整性(Integrity) 数据内容是完整的, 没有被篡改手段:数字签名可用性(Avaliability) 服务应该随时可用分布式拒绝攻击例子: 假设一个停车场里面有100个车位,在正常的情况下
2017-09-30 12:46:37
786
转载 Xpath语法(二)
示例Xml:?1234567891011121314151617181920212223242526272829xmlversion="1.0"encoding="utf-8"?>pets> catcolor=
2017-06-28 16:17:31
574
转载 xpath语法(一)
xpath的语法XPath 是XML的查询语言,和SQL的角色很类似。以下面XML为例,介绍XPath 的语法。 Empire Burlesque Bob Dylan 10.90 Hide your heart Bonnie Tyler 9.90 Greatest Hits
2017-06-28 16:13:52
457
原创 应用架构之RPC架构
RPC框架简介什么叫RPC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。为什么会
2017-06-27 08:27:16
601
转载 什么是垂直搜索引擎
垂直搜索是针对某一个行业的专业搜索引擎,是搜索引擎的细分和延伸,是对网页库中的某类专门的信息进行一次整合,定向分字段抽取出需要的数据进行处理后再以某种形式返回给用户。垂直搜索引擎和普通的网页搜索引擎的最大区别是对网页信息进行了结构化信息抽取,也就是将网页的非结构化数据抽取成特定的结构化信息数据,好比网页搜索是以网页为最小单位,基于视觉的网页块分析是以网页块为最小单位,而垂直搜索是以结构化数据为
2017-06-26 09:05:12
4016
原创 面向对象设计(2)
面向对象设计原则单一职责原则 (SRP)开闭原则 (OCP)Liskov 替换原则 (LSP)接口隔离原则 (ISP)依赖倒置原则 (DIP)SOLIDOCP: 开闭原则软件模块对扩展是开放的 当需求发生改变时,可以对模块进行扩展软件模块对修改是封闭的 对模块进行扩展时, 无须改动模块的源代码。似乎是矛盾的 ?面向对象设计的原则 (2) : 开闭原则缺点:对扩展开放: 可
2017-06-21 00:24:05
307
原创 Java并发编程之线程(二)
多线程编程的特点同一份代码,可以有多个线程执行 既可以在一个CPU核上并发执行也可以在多个CPU核上并行执行线程的执行默认是乱序的 程序员不能假定执行次序线程会共享数据(对象的变量) 需要互斥线程之间也需要合作(同步)如何实现互斥 ?锁 ! 只有获得了锁的线程,才能够对共享资源做操作, 换句话说:进入临界区对共享资源做完操作(即使发生异常),一定要释放锁!锁到底是个什么东西
2017-06-19 16:20:30
369
原创 Java并发编程之线程(一)
概念线程是一种轻量级的进程。线程优点 多个线程拥有共享同一个地址空间和所有可用数据的能力。线程比进程更容易创建和销毁在大量计算和大量 I/O 处理过程中,多个线程能够加快程序执行速度。进程是独立的地址空间:通信比较麻烦。进程之间数据共享没有线程之间方便和高效每个进程至少有一个线程,可以认为那个线程就是主线程。每个线程都要维护自己的一台寄存器与堆栈。那么什么叫维护自己的一套寄存器呢?物理
2017-06-16 07:37:19
315
原创 Java并发编程之进程
引入操作系统的关键抽象:内存大小有限,操作系统会为每个进程分配独立的虚拟地址空间。虚拟地址空间会映射到物理地址空间。JAVA虚拟机和VMWARE并没有CPU,硬盘等,可以说是一个软的虚拟机。比喻 : 厨师做蛋糕做蛋糕的食谱: 程序做蛋糕的原料:输入数据厨师: CPU厨师阅读食谱,用原料做蛋糕的一系列动作的总和: 进程厨师的儿子跑进了,说是被蜜蜂蛰了厨师记录下当前做到哪一步了(保存当前进程状
2017-06-15 10:15:14
398
原创 Spring 在静态工具类中使用注解注入bean
问题最近在项目中遇到这样一个情况:有一个发送邮件的工具类。在这个工具类中提供了几种静态方法,静态方法需要另外一个类的实例提供处理。解决在网上查阅了资料后有几种解决方案,具体可以参考http://blog.sina.com.cn/s/blog_6e2d53050102wl3x.html。@Componentpublic class MailUtils { @Autowired //注意这里非
2017-06-14 17:13:54
8957
原创 I/O 模型
预备知识1: 用户空间和内核空间虚拟存储器 以32位操作系统为例, 能访问的内存最大为4G 0–3G 虚拟地址分配给各个用户进程(用户空间) 每个进程都有3G的虚拟地址空间3–4G 虚拟地址分配给操作系统核心和驱动程序(内核空间)用户空间和内核空间不能用指针来传递数据() 注意: - Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传
2017-06-14 11:23:41
364
原创 面向对象设计的原则--单一职责原则(SRP)
概述职责: 是引起变化的原因如果有多于一个的动机去改变一个类,这个类就具有多于一个职责把多个职责耦合在一起,一个的变化可能会削弱或者抑制这个类完成其他职责的能力SRP : 对一个类而言, 应该仅有一个引起它变化的原因。SRP例子一这个设计违反了单一职责原则(SPR)。Rectangle提供了两个职责。第一个职责提供了一个矩形集合形状的数学模型,第二个职责把矩形绘制在图形界面上。将两个职责分
2017-06-12 09:06:27
456
原创 面向对象设计(1)
从需求开始谈起需求总是不完整的,错误的,容易让人产生误解需求一直在变化 用户对需求的看法,可能在与开发人员讨论以及看到软件新的可能性后发生变化随着对问题的熟悉, 开发人员对问题领域的看法也会变化不是需求在变, 而是人们对需求的理解在变化如何去应对变化? 例子一:听课假设你在一个会议上担当讲师, 听课的人在课后还要去听其他课程, 但他们不知道下一堂课的听课地点, 你的责任就是, 确保
2017-06-12 01:29:10
461
转载 使用Python模拟登录知乎
小试牛刀:使用Python模拟登录知乎 Posted on 2016-11-05 | InSpider | | views : 1610最近突然对爬虫兴趣倍增,主要是自己想从网上爬点数据来玩玩。前阵子从某房屋出售网爬取了长沙地区的房价以及2016年的成交额,只有几千条数据,量较少,没劲o(╯□╰)o,因此将目标成功地转移到了社交网上,难度显然大了点
2017-06-07 16:30:27
1139
转载 JAVA设计模式初探之装饰者模式
这个模式花费了挺长时间,开始有点难理解,其实就是定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。
2017-06-05 11:06:45
297
原创 JAVA虚拟机简介
Java虚拟机 注意:我们这里说的虚拟机是所谓的高级语言虚拟机, 并不是像Vmware那样, 完全虚拟一个硬件和操作系统出来。此外java虚拟机上还可以运行clojure, scala , Jruby, Jptyon等语言Java虚拟机列表: - https://www.zhihu.com/question/29265430?sort=created - https://my.oschi
2017-06-04 11:30:51
697
原创 LRU算法–缓存淘汰算法
LRU算法–缓存淘汰算法目录LRU算法缓存淘汰算法目录什么是 LRULRU 算法思想为什么需要页面置换算法分页原理图假设使用 FIFO 先进先出 实现页面置换算法LRU 算法原理图使用双向链表实现LRU算法Clock算法是公认的很好的近似LRU的算法1. 什么是 LRULRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是
2017-06-03 10:43:50
2241
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人