原理

小觑数据库(SqlServer)查询语句执行过程

白昼怎懂夜的黑 提交于 2019-12-01 13:43:28
近年来,越来越多的NoSql产品不断的以技术革命的者的身份跳出来:"你看哥是多么的快,你们关型型数据库真是战五渣阿"。是的,高性能的场景下NoSql真的很出彩。而我们关系型数据库只能在墙角哭泣"是的,没错,他们真的好快"。 但是他们为啥哪么快?用了 雷政富光环了 吗?我们从了解数据库引挚执行过程来了解一些基础知识,看看我们关系型数据库到底慢在哪?我只粗懂一些SqlServer,只能从SqlServer讲起。但是SQLServer是一个非常复杂的软件。我们将通过一个查询的执行过程让你对SQlServer的核心引挚和运行过程做一个简单的了解。 由于Select语句和Update语句基本一样,但是Update涉及到修改语句,所以我们直接从一条Sql语句开讲。 update 码农表 set 女友=1 where 女友=0 当我们码农写下这样一条Sql,小手轻按F5。 一个女朋友就产生了 一条语句在客户端被以TDS(Tabular Data Stream)协议形式中发给SqlServer服务端的网络接口(SQL Server Network Interface)。 什么是TDS协议这不重要。 因为TDS是一个专属协议,最早由Sysbase公司设计用于与数据库服务交互。你无须过多关心。SNI是一个 协议层用于在服务端和客户端建立网络连接,自SqlServer2005以后才有

Oracle 基础篇 --- B树索引内部结构

微笑、不失礼 提交于 2019-11-30 16:19:06
#####内部结构 将B树索引转储成树状结构的形式而呈现出来: alter session set events 'immediate trace name treedump level INDEX_OBJECT_ID'; SQL> alter session set events 'immediate trace name treedump level 126545'; Session altered. [oracle@hzvscmdb trace]$ pwd /home/oracle/app/oracle/diag/rdbms/tonytest/tonytest/trace [oracle@hzvscmdb trace]$ vi tonytest_ora_5439.trc ----- begin tree dump branch: 0x34000e3 54526179 (0: nrow: 444, level: 1) leaf: 0x34000e4 54526180 (-1: nrow: 393 rrow: 393) leaf: 0x34000e5 54526181 (0: nrow: 377 rrow: 377) leaf: 0x34000e6 54526182 (1: nrow: 378 rrow: 378) leaf: 0x34000e7 54526183 (2:

轻松理解AOP(面向切面编程)

泪湿孤枕 提交于 2019-11-29 08:05:39
本文主要介绍AOP思想,而不是Spring,Spring在本文只做为理解AOP的工具和例子,所以也不打算介绍Spring的Aspect、Join point、Advice、AOP proxy等概念,那样初学者会很难理解,如果你懂了AOP的思想,那么Spring的AOP,还是AspectJ都容易理解了。 Spring如此流行,当我第一次接触Spring的时候,到网上看了一些文章,都讲得神乎其乎,最后我篇也没看懂,我当时就是认为这个东西一定很高深,于是我就遇到做WEB开发的人就会打听一下。得到最多的一个回答就是“Spring是一个框架”,然后我就会问框架是什么,但都没有一种说法不让我感觉玄乎乎的,同时也没有听懂,于是,我更感觉Spring很神了,这可能叫做朦胧美。还有一种说法就是“Spring两个首要的特性就是AOP和IoC”,这种说法让我感觉Spring简直神的飞上天了,我都不敢接着问了,再问可能想上天去找Spring了,后来我就怀疑这玩意儿真有那么高深吗,强列的好奇心让我实在hold,决定一定要试一下这个神器,于是就看了一些Step By Step的文章,自己写了一个HelloWorld,发现这AOP确实是一个比较新颖的思想,也算是打破了常规,是从不同方面思考问题。不过没有那些童鞋说得那么神。 本文旨在帮助还没有理解AOP的童鞋看透弄懂AOP,也欢迎高手批评指正。

从源代码角度看Struts2返回JSON数据的原理

余生颓废 提交于 2019-11-29 04:18:56
前面一篇文章其实只是介绍了如何在Struts2中返回JSON数据到客户端的具体范例而无关其原理,内容与标题不符惹来标题党嫌疑确实是笔者发文不够严谨,目前已修改标题,与内容匹配。本文将从struts2-json插件的源码角度出发,结合之前的应用范例来说明struts2-json插件返回JSON数据的原理。 用winrar打开struts2-json-plugin-xx.jar(笔者使用版本为2.1.8.1),根目录下有一个struts-plugin.xml,这个文件想必大家都很了解,不做过多介绍了。打开该文件,内容非常简答,如下: Xml代码 <? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > < struts > < package name = "json-default" extends = "struts-default" > < result-types > < result-type name = "json" class = "org.apache

深入分析Java ClassLoader原理

青春壹個敷衍的年華 提交于 2019-11-28 10:27:40
一、什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是 BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而 这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会 引发系统异常。而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的类加载机制 (ClassLoader)来动态加载某个class文件到内存当中的,从而只有class文件被载入到了内存之后,才能被其它class所引用。所以 ClassLoader就是用来动态加载class文件到内存当中用的。 二、Java默认提供的三个ClassLoader BootStrap ClassLoader :称为启动类加载器,是Java类加载层次中最顶层的类加载器, 负责加载JDK中的核心类库,如:rt.jar、resources.jar、charsets.jar等 ,可通过如下程序获得该类加载器从哪些地方加载了相关的jar或class文件: URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();

JSONP原理优缺点(只能GET不支持POST)

倖福魔咒の 提交于 2019-11-27 14:36:42
JSONP的优点是:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都 可以运行,不需要XMLHttpRequest或ActiveX的支持;并且在请求完毕后可以通过调用callback的方式回传结果。 JSONP的缺点则是:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。 =============================================================================================================== JSONP原理 JSONP的最基本的原理是:动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。 这样其实"jQuery AJAX跨域问题"就成了个伪命题,jquery $.ajax方法名有误导人之嫌。 如果设为dataType: 'jsonp',这个$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议。JSONP是一个非官方的协议