一直在路上..........
暂时未有相关通用技术能力~
阿里云技能认证
详细说明线程安全 我们这里讨论的线程安全,就限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程执行对它来说是完全没有区别的。
并发不一定要依赖多线程(如PHP中很常见的多进程并发),但是在Java里面谈论并发,大多数都与线程脱不开关系。 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。
“让计算机并发执行若干个运算任务”与“更充分地利用计算机处理器的效能”之间的因果关系,看起来顺理成章,实际上它们之间的关系并没有想象中的那么简单,其中一个重要的复杂性来源是绝大多数的运算任务都不可能只靠处理器“计算”就能完成,处理器至少要与内存交互,如读取运算数据、存储运算结果等,这个I/O操作是很难消除的(无法仅靠寄存器来完成所有运算任务)。
在部分的商用虚拟机(Sun HotSpot、IBM J9)中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code)。
从Sun Javac的代码来看,编译过程大致可以分为3个过程: 解析与填充符号表过程。 插入式注解处理器的注解处理过程。 分析与字节码生成过程。 Javac编译动作的入口是com.sun.tools.javac.main.JavaCompiler类,上述3个过程的代码逻辑集中在这个类的compile()和compile2()方法中,整个编译最关键的处理就由图中标注的8个方法来完成,下面我们具体看一下这8个方法实现了什么功能。
连接故障恢复 MySQL套接字被误删 在UNIX系统上,本地客户以localhost为主机名建立MySQL连接,该过程是通过一个UNIX套接字文件(比如说,/tmp/mysql.sock文件)实现的。
用户管理 MySQL数据库中的表与其他任何关系表没有区别,都可以通过典型的SQL命令修改其结构和数据。可以使用GRANT和REVOKE命令。通过这些命令,可以创建和禁用用户,可以在线授予和撤回用户访问权限。
性能优化是通过某些有效的方法提高MySQL数据库的性能。性能优化的目的是为了是MySQL数据运行速度更快、占用的磁盘空间更小。性能优化包括很多方面,例如优化查询速度、优化更新速度和优化MySQL服务器等。
备份数据是数据库管理最常用的操作。为了保证数据库中数据的安全,数据管理员需要定期进行数据备份。一旦数据库遭到破坏,便可通过备份的文件来还原数据库。因此,数据备份是一项很重要的工作。 数据备份 使用mysqldump命令备份,mysqldump命令可以将数据库中的数据备份成一个文本文件。
在用户操作MySQL过程中,对于一般简单的业务逻辑或中小型程序而言,无需考虑应用MySQL事务。但在比较复杂的情况下,往往用户在执行某些数据操作过程中,需要通过一组SQL语句执行多项并行业务逻辑或程序,这样,就必须保证所用命令执行的同步性。
视图是从一个或多个表中导出的表。是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。这样,用户可以不用看到整个数据库表中数据,而只关心对自己有用的数据。视图可以使用户的操作更方便,而且可以保障数据库系统的安全性。
触发器是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。 创建MySQL触发器 在MySQL中,创建只有一个执行语句的触发器的基本形式如下: CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句 具体的参数说明如下: 触发器名:指定要创建的触发器名字。
存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的。
索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
SELECT语句是最常用的查询语句,它的使用方式有些复杂,但功能却相当强大。SELECT语句的基本语法如下: select selection_list//要查询的内容,选择哪些列 from数据表名//指定数据表 where primary_constraint//查询时需要满足的条件,行必须满足...
MySQL的内置函数不但可以在SELECT查询语句中应用,同样也可以在INSERT、UPDATE和DELECT等语句中应用。例如,在INSERT添加语句中,应用日期时间函数获取系统的当前时间,并且将其添加到数据表中。
基本操作 mysql -P 3306 -h 127.0.0.1 -uroot -p123456 show engines\G 可以用“;”结束,也可以用“\g”或者“\G”结束。“\g”与“;”的作用是相同的,“\G”可以让结果显示得更加美观。
根搜索收集器 跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到GC Roots 没有任何引用链时,则证明此对象是不可用的。
JVM把class文件加载的内存,并对数据进行校验、转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称链接。
数据库中的表结构确立后,表中的数据代表的意义就已经确定。而通过MySQL运算符进行运算,就可以获取到表结构以外的另一种数据。例如,学生表中存在一个birth字段,这个字段表示学生的出生年份。而运用MySQL的算术运算符用当前的年份减学生出生的年份,那么得到的就是这个学生的实际年龄数据。
在MySQL数据库中,每一条数据都有其数据类型。MySQL支持的数据类型主要分成3类:数字类型、字符串(字符)类型、日期和时间类型。 数字类型 MySQL支持所有的ANSI/ISO SQL 92数字类型。
下面主要介绍InnoDB、MyISAM和MEMEORY三种存储引擎。 InnoDB存储引擎 InnoDB遵循CNU通用公开许可(GPL)发行。InnoDB已经被一些重量级互联网公司所采用,如雅虎、Slashdot和Google,为用户操作非常大的数据库提供了一个强大的解决方案。
TLS算法组合 在TLS中,5类算法组合在一起,称为一个CipherSuite: 认证算法 加密算法 消息认证码算法 简称MAC 密钥交换算法 密钥衍生算法 比较常见的算法组合是 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 和 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 都是ECDHE 做密钥交换,使用RSA做认证,SHA256做PRF算法。
展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
对象的Class加载 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。
程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
Spring AMQP 是基于 Spring 框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO的消息监听等,很大方便我们使用RabbitMQ程序的相关开发。 Spring AMQP包含一些模块,如:spring-amqp, spring-rabbit and spring-erlang等,每个模块分别由独立的一些Jar包组成. Spring AMQP模块主要包含org.springframework.amqp.core这个包中。
RabbitMQ在windows下的安装 RabbitMQ 它依赖于Erlang,在window上安装时,需要先安装Erlang。 首先确定你的window电脑是32位还是64位,然后下载对应版本的Erlang软件。
什么是AMQP AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。
它这种设计策略完全类似于Java实现OOP的设计理念,当然Java本身的设计要比Spring复杂太多太多,但是它们都是构建一个数据结构,然后根据这个数据结构设计它的生存环境,并让它在这个环境中按照一定的规律不停地运动,在它们的不停运动中设计一系列与环境或者与其他个体完成信息交换。
velocity就是由template,engine,context组成。 1、首先创建一个template(如果是用在web上就是一个html文件),将需要参数化或实例化的地方用跟context有关的符号标记出来,标记时用velocity template language。
使用特定JVM参数运行服务端代码 要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是: 1 -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port} 其中的${debug_port}是用户自定义的,为debug端口,本例以5555端口为例。
在一个工程中如果想要使用 SpringMVC的话,只需要两个步骤 在web.xml中配置一个DispatcherServlet。需要配置一个org.springframework.web.servlet.DispatcherServlet的servlet。
filter servlet ...
SpringBoot核心启动类的SpringApplication。从SpringApplication.run()开始先创建SpringApplication对象,并调用该对象的run方法。 public static ConfigurableApplicationContext run(Object source, String.
淘宝前台系统的优化历程 2009年,系统拆分,静态文件合并,前端页面异步化和JSON化。 2010年,去DB依赖,引入缓存,提升单机QPS,关注用户体验。 2011年,优化进入深水区Velocity,BigPipe。
创建一个ServletContextServer类,用来初始化web应用程序的Context,并且指定Servlet和Servlet匹配的url。这里指定了两个Servlet,分别是HelloServlet和GoodbyeServlet,并分别对应/hello/*和/goodbye/*。
何为同步?JVM规范规定JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步是使用monitorenter和monitorexit指令实现,而方法同步是使用另外一种方式实现的,细节在JVM规范里并没有详细说明,但是方法的同步同样可以使用这两个指令来实现。
ACID特性 原子性(Atomicity)事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位。 一致性(Consistency)执行完数据库操作后,数据不会被破坏。打个比方,如果从 A 账户转账到 B 账户,不可能因为 A 账户扣了钱,而 B 账户没有加钱吧。
如果用最简洁的话来总结 iBATIS 主要完成那些功能时,我想下面几个代码足够概括。 1 Class.forName("oracle.jdbc.driver.OracleDriver"); 2 Connection conn= DriverManager.
Tomcat 的心脏是两个组件:Connector 和 Container,Connector 组件是可以被替换,这样可以提供给服务器设计者更多的选择,因为这个组件是如此重要,不仅跟服务器的设计的本身,而且和不同的应用场景也十分相关,所以一个 Container 可以选择对应多个 Connector。
Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator)。
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础。要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力。
配置元素说明: 元素名 属性 解释 server port 指定一个端口,这个端口负责监听关闭tomcat 的请求 shutdown 指定向端口发送的命令字符串 service name 指定service 的名字 Connector...
Web请求过程 如何发起请求:browser,httpclient http解析:chrome ,cache Dns域名解析:域名缓存 cdn:负载,动态加速,回源 Java I/O I/0类库的基本架构:字节操作,字符操作,字节字符的转化 磁盘的I/O:内核空间,用户空间,同步...
类加载过程中每个步骤的顺序 我们已经知道,类加载的过程包括:加载、连接、初始化,连接又分为:验证、准备、解析,所以说类加载一共分为5步:加载、验证、准备、解析、初始化。 其中加载、验证、准备、初始化的开始顺序是依次进行的,这些步骤开始之后的过程可能会有重叠。
JVM的全名是Java Virtual Machine(Java虚拟机)。它是通过模拟一个计算机的形式来实现到计算机所具有的计算功能。让我们先来看看一台真实的计算机具备计算功能的条件: 指令集 这个计算机所能识别的机器语言的命令集合。
ClassLoader是个抽象类,它还有很多子类,我们如果要实现自己的ClassLoader,一般都会继承URLClassLoader这个字类,因为这个类已经帮我们实现了大部分工作,我们只需要在适当的地方做些修改就好了,就像我们要实现Servlet时通常会直接继HttpServlet —样 。
java源代码(符合语言规范)-->javac-->.class(二进制文件)-->jvm-->机器语言(不同平台不同种类) 如何让java的语法规则适应java虚拟机的语法规则?这个任务由javac编译器来完成java语言规范转换成java虚拟机语言规范。
一、继承关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。