spring-事务概述 目录Spring事务架构事务特性并发事务下存在的几个安全性问题脏读不可重复读幻读事务的隔离级别事务传播特性Spring事务常用的类和接口Spring中使用事务的套路容器中注册事务相关组件createBean时生成代理对象,并注册到容器调用代理Bean的相关方法时Spring事务架构事务特性事务是指逻辑上的一组操作...
利用LineBasedFrameDecoder解决TCP粘包问题 1:TimeServer类import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.chan
Netty的第一个例子 TimeServer类:import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.cha
jvm相关参数及其含义 1:-XX:+CMSClassUnloadingEnabled 2:-XX:CMSFullGCsBeforeCompaction=1 3: -XX:CMSInitiatingOccupancyFraction=72 4:-XX:ConcGCThreads=4 5:-XX:+DisableExplicitGC 6:-XX:InitialHeapSize=6442450944 7:
Rabbit Mq 流控解释 Rabbit Mq 流控解释:https://www.rabbitmq.com/blog/2015/10/06/new-credit-flow-settings-on-rabbitmq-3-5-5/
spring配置定时器如何设置,波哥告诉您 时间大小由小到大排列,从秒开始,顺序为 秒,分,时,天,月,年 *为任意 ?为无限制。具体如下:"0/10 * * * * ?" 每10秒触发"0 0 12 * * ?" 每天中午12点触发"0 15 10 ? * *" 每天上午10:15触发"0 15 10 * * ?" 每天上午10:15触发"0 15 10 * * ? *" 每天上午10:15触发
Redis管道(Pipelining)操作 redis的管道(Pipelining)操作是一种异步的访问模式,一次发送多个指令,不同步等待其返回结果。这样可以取得非常好的执行效率。这就是管道,调用方法如下:@Testpublic void test3Pipelined() { Jedis jedis = new Jedis("localhost"); Pipeline pipeline = jedis.pipeline
Jedis使用总结【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】 一、 Pipeline官方的说明是:starts a pipeline,which is a very efficient way to send lots of command and read all the responses when you finish sending them。简单点说pipeline适用于批处理。当有大量的操作需要一次性执行的时候,可以用管道。示例:
NoSQL数据库之Redis数据库管理五(Redis的常用命令及高级应用) 返回0表示不存在,返回1表示存在 select 数字:表示选择数据库的命令,select 0 表示选择第0个数据库;数据库编号是0-15,一共16个数据库;PONG表示连接成功;info:获取服务器的信息和统计;可以返回一些相关配置参数的值;
NoSQL数据库之Redis数据库管理四(set类型和zset类型) srem返回1表示删除成功,返回0表示删除不成功;注意弹出元素的随机性;返回1说明在集合中,返回0说明不在集合中;zcard:返回集合中的元素个数;
NoSQL数据库之Redis数据库管理三(list类型) lrange mylist 0 -1:左边的0表示从表头的第一个元素,-1:表示从尾部的第一个元素;返回的数代表删除的个数;返回0表示没有删除成功;注意ltrim是保留的意思
MySql优化的问题分析、方法和思考 系统经过一段时间的运行后,如果Com_select的总数比Com_insert、Com_update和Com_delete的总数远远大于,那么说明该系统是一个OLAP的系统; 通过该语句显示sq
Spring MVC对比Struts2 越努力,越幸运,欢迎关注我的个人技术公众号深耕java领域,技术专家,CSDN博客专家,联系我请去 微信公众号:波哥的技术积累,回复“资料”,会有意外惊喜,包含面试题,系统架构图,并发包源码分析等资料,而且波哥老师的视频教程【Java并发包源码分析(JDK1.8)】即将免费,https://edu.csdn.net/course/detail/22039,大家有对JUC源码感兴趣...
在Spring的环境下使用Spring MVC 图:SpringMVC的容器作为beans.xml的子容器,CustomerAction可以引用CustomerService,而CustomerService却不能引用CustomerAction
Spring MVC的运行流程 HandlerExecutionChain包含了拦截器,Handler以及目标方法; 图:HandlerMapping定义了请求和处理器之间的映射 图:RequestMappingHandlerMapping处理的是标注了@RequestMapping的映射; Simp
文件的上传 越努力,越幸运,欢迎关注我的个人技术公众号深耕java领域,技术专家,CSDN博客专家,联系我请去 微信公众号:波哥的技术积累,回复“资料”,会有意外惊喜,包含面试题,系统架构图,并发包源码分析等资料,而且波哥老师的视频教程【Java并发包源码分析(JDK1.8)】即将免费,https://edu.csdn.net/course/detail/22039,大家有对JUC源...
Restful CRUD 图:链接 图:employeeList.jsp 图:Spring MVC所有的标签form:button, form:checkbox, form:checkboxes, form:errors, form:form, form:hidden, form:input, form:label, form:optio
视图和视图解析器 1从上图可以看出,无论返回的是String对象、ModelAndView对象还是View对象,SpringMVC最后都会转换成ModelAndView对象 图:i18n_zh_CN.properties 图:i18n_en_US.properties 图:配置国际化资源文件前缀
处理模型数据 * 目标方法的返回值可以是ModelAndView类型* 其中可以包含视图和类型信息* SpringMVC会把ModelAndView中的model中的数据放入到request域对象中其实传入的Map类型为:org.springframework.validation.support.BindingAwareModelMap类
映射请求参数&请求参数 如果方法为如下的形式:即age的类型为@RequestParam(value="age", required=false) int age,那么如果我们采用如下的形式来访问:http://localhost:8080/Spring4/springmvc/testRequestParam?username=atguigu即无法把null值转换为int类型的数据;可
SpringMVC 概述 commons-loggings是用来生成日志的; /*** 1:使用RequestMapping来映射请求的url* 2:返回值会通过视图解析器解析为实际的物理视图,对于* org.springframework.web.servlet.view.InternalResourceViewResolver* 视图解析器会做如下的解析,通过这
MySQL的优化技术总结 如果Cache很大,把数据放入内存中的话,那么瓶颈可能是CPU瓶颈或者CPU和内存不匹配的瓶颈;seek定位的速度,read/write即读写速度;硬件的提升是最有效的方式;innodb_buffer_pool_size:配置innodb的数据缓冲池的大小来提高整体效率,可用内存即除去系统软件等内存后的内存大小;innodb_buffer_pool_instances:
storm入门 hadoop, 批处理,通过磁盘IO处理,吞吐量大;strom,实时,通过内存处理,吞吐量小;高频:高频率;生产者和消费者之间使用Message Queue,有Kafka, Active MessageQ和Rabbit Mq 图:Hadoop与Storm的比较
flume-ng应用场景分析 图:FLUME的配置,把控制台的输出命令写出到avro这种格式;This sets up a source that runs "tail" and sinksthat data via Avro RPC to 10.1.1.100 on port 10000.The collecting Flume agent on the Hadoop cluster willneed a
hadoop项目架构 1:日志采集;2:传输日志;3:将日志写入HDFS;4:从HDFS中将日志装载入数据仓库中;5:对装载的数据进行分析;6:调用Hadoop集群的M/R执行并行计算,并返回结果;7:将结果中有价值的数据写入HBASE数据库;8:报表系统&应用程序端通过HBASE查询数据并展现;备注:1:HBASE主要是和前端用户打交道的,因为HBASE的速度快;2:原始数据如果要被变
1.flume简介 Event:每条数据的统称;Client:客户端,Agent: 代理,即谁去采集数据,部署的工具,包括很多组件,如Sources, Channels和Sinks等;Source:用来接收数据,数据来源可以定制;Sink:用来把数据写出;Channel:把Source和Sink连接在一起的管道; 使用Agent来实现负载均衡;容错性高一些;使源地址
Mysql索引优化 (1)InnoDB存储引擎的索引为主键索引;(2)从多个索引选择最优的执行计划时需要花费时间;(3)如果存在大量的更新,插入或者删除,那么索引需要实时的维护;(4)在数据库内核实现索引是非常复杂的,如何最大程度的满足并发,以及如何需要慎重使用索引,而不是盲目的使用索引。(1)单表扫描的花费为C1,使用索引扫描的花费为C2,进一步判断C1和C2的关系,如果C2小,
Pig自定义功能 user.data:第1列是用户id,第2列是用户名;role.data:第1列是角色id,第2列是角色名,第三列是用户id;比如想在PIG中过滤id为3的记录:使用自定义函数的方式来解决: 图:在exec函数中判断id的值是
Pig简单入门 Pig专门用来处理来自于HDFS的数据,它提供了一套流式的数据处理语言,转化为Map-Reduce来处理HDFS的数据;Pig包括用来描述数据分析程序的高级程序设计语言,以及对这些程序进行评估的基础结构。Pig突出的特点就是它的结构经得起大量并行任务的检验,这使得它能够处理大规模数据集。 使用pig命令直接进入命令行模式; 在命令行模式照样可以使用hadoo
Mysql物理查询技术 逻辑查询优化主要基于代数理论与启发式规则。 (1):是全盘扫描最优,还是基于索引的扫描最优;对于单表扫描,主要还是看磁盘IO; (2):不同表的连接方式,有不同的消耗;块嵌套循环连接算法,基于Hash的连接,排序归并连接; (3):考虑哪一种连接的花费是最少的; 图:物理查询优化技术 如果选择率低于10%,
Hbase与MapReduce 注意:HBase的行键的设计必须和业务有关,在这里我们用手机号加时间戳的组合来定义主键。 注意继承的类变为了TableReducer,该类属于HBase范畴,研究TableMapper的使用方法。 SPLITS=>['a', 'b', 'c'],创建的分区以a, b, c作为划分。 创建的Region的情
HBase的java操作 package com.ccse.hbase;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;
NoSQL数据库之Redis数据库管理一(Redis的介绍与安装部署) 在NoSql中,类似于insert,select,delete和update的sql语句是不起作用的;ACID属性表示事务特性,NoSql对此的支持比较弱;NoSql中没有一个固定的表结构;
jdk命令积累 1:-verbose:gc:在虚拟机发生GC时在输出设备显示信息;2:-Xloggc::指定GC日志记录输出的文件路径;3:-XX:+PrintGC:输出GC信息,类似于-verbose:gc参数;4:-XX:+PrintGCDetails:打印输出更多垃圾回收相关信息;5:-XX:+PrintGCTimeStamps:输出每次开始时间的时间戳,用于查看垃圾回收频率;6:-Xm
HBase数据模型、概念视图和物理视图 1:数据模型 HBase是一个类似Bigtable的分布式数据库,它是一个稀疏的长期存储的(存储在硬盘上)、多维度的、排序的映射表,这张表的索引是行关键字、列关键字和时间戳,HBase中的数据都是字符串,没有类型。 用户在表格中存储数据,每一行都有一个可排序的主键和任意多的列。由于是稀疏存储,同一张里面的每一行数据都可以有截然不同的列。 列名字的格式是":",都是由字符串
hbase的shell操作 图:hbase支持的命令格式 图:通过hbase shell进入命令行模式 图:通过help命令查看各种命令组 图:通过help 'general'来查看命令general的作用
zookeeper伪分布式安装 server.3=192.168.1.201:2990:3990以上是原理内容,以下是真正的配置 图:zoo1.cfg的配置 图:zoo2.cfg的配置(修改了clientPort和dataDir的值) 图:zoo3.cfg的配置 图:使用mkdir -p命令创建数据目录 图:创建myid文件,并写入值
mysql-数据库的约束规则与语义优化 实体完整性:实体与数据库中表的映射关系; 域完整性:实体的部分如何保证值是正确的; 参照完整性:实体与其他实体的关系,有主外键的关系; 用户自定义完整性:从用户的角度,如何保证实体或者实体的一部分是正确的; 主键是不允许空值,它唯一标识一个实体;
Hive-函数 1:使用show functions来显示所有的函数, 使用类似describe function substr的命令来查看函数substr的定义 2:常见函数 执行命令select array(1, 2, 3, 4) from dual;生成一行结果[1, 2, 3, 4]
Hive-自定义文件格式 前面在讲述创建表的语句时,省略了一些内容,更加完整的语法如下CREATE TABLE t1(...) STORED AS TEXTFILE;最后的STORED AS 子句,指的是Hive数据文件的存储格式,这里使用的是TEXTFILE,还有SEQUENCEFILE和RCFile,一共三种。TEXTFILE是最普通的文件存储格式,内容是可以直接查看。SEQUCENFILE是包
Hive-表连接 Hive只支持等值连接,即ON子句中使用等号连接,不支持非等值连接。Hive内置的数据存储类型,TextFile, SequenceFile, ORC(列式存储)如果连接语句中有WHERE子句,会先执行JOIN子句,再执行WHERE子句。[吴超1] 假设有以下测试数据表user数据如下User_idname1张三
Hive之压缩存储 压缩存储有时候可以获得更好的性能。 使用TextFile存储时,可以使用GZIP或者BZIP2进行压缩。操作如下CREATE TABLE raw (line STRING) ROW FORMAT DELIMITED FIELDSTERMINATED BY '\t' LINES TERMINATED BY '';LOAD DATA LOCAL INPATH '/tmp/weblo
Hive之复合类型 hive array、map、struct使用hive提供了复合数据类型:Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域aMaps(K-V对):访问指定域可以通过["指定域名称"]进行,例如,一个Map M包含了一个group-》gid的kv对,gid的值可以通过
Java并发编程的类、接口和方法 1:线程池 与每次需要时都创建线程相比,线程池可以降低创建线程的开销,这也是因为线程池在线程执行结束后进行的是回收操作,而不是真正的 销毁线程。2:ReentrantLock ReentrantLock提供了tryLock方法,tryLock调用的时候,如果锁被其他线程持有,那么tryLock会立即返回,返回结果为false,如果锁没有被其他线程持有,那么当前调用线程
MongoDb的一个实例 产品表:{ _id: new ObjectId("4c4b1476238d3b4dd5003981"),slug:"wheel-barrow-9092",sku: "9092",name:"Extra Large Wheel Barrow",description: "Heavy duty wheelbarrow...",details: {weight: 47,weight_u
mongodb中查询和sql查询之间的关系 SqlMongodbSELECT * FROM usersDb.users.find()SELECT a,b FROM usersDb.users.find({},{a:1,b:1})SELECT * FROM users WHERE age=33Db.users.find({age:33}
JVM调优 JVM调优主要是指内存管理方面的调优,包括各个代的大小、GC策略等。 1:代大小的调优 最关键的参数为-Xms -Xmx -Xmn -XX:SurvivorRatio -XX:MaxTenuringThreshold -Xms和-Xmx通常设置为相同的值,避免运行时要不断的扩展JVM的内存空间,这个值决定了JVM Heap所能使用的最大空间 -Xmn决定了新生代(N
使用java查看mongodb的数据库、集合以及数据信息 package com.mongodb;import java.net.UnknownHostException;import com.mongodb.util.JSON;public class Test1 { public static void main(String[] args) throws UnknownHostException { Mongo mongo
redis客户端程序实例 package com.redis;import java.util.ArrayList;import java.util.List;import java.util.Set;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoo
redis各种类型的存储情况分析 1:SORT命令的时间复杂度是0(n+mlogm),其中n表示要排序的列表(集合或有序集合)中的元素个数,m表示要返回的元素个数 所以开发中使用SORT命令时需要注意以下几点。(1)尽可能减少待排序键中元素的数量(使n尽可能小)。(2)使用LIMIT参数只获取需要的数据(使m尽可能小)。(3)如果要排序的数据数量较大,尽可能使用STORE参数将结果缓存2: 任务队列
redis中有序集合类型和列表类型的不同点与相同点 有序集合类型在某些方面和列表类型有些相似。(1)二者都是有序的。(2)二者都可以获得某一范围的元素。但是二者有着很大的区别,这使得它们的应用场景也是不同的。(1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的应用。(2)有序集合类型是使用散列表和跳跃表(Skip li
Struts2的初始化主线 1:初始化主线在系统启动时运行一次,Http请求处理主线则在系统启动完毕后以侦听请求的方式运行。2:基于Filter所实现的Servlet规范中不同方法的生命周期的不同,规划了Struts2不同的运行主线。3:Dispatcher:核心分发器;PrepareOperations:Http预处理类;ExecuteOperations:Http处理执行类;4:核心驱动力的逻辑:对于程序运行
Mysql的等价谓词重写 总之,存在以下规则:1:LIKE规则:是对LIKE谓词的等价重写,即改写LIKE谓词为其他等价的谓词,以更好地利用索引进行优化2:BETWEEN-AND规则:是BETWEEN-AND谓词的等价重写,即改写BETWEEN-AND谓词为其他等价的谓词,以更好地利用索引进行优化3:IN转换OR规则:IN转换OR规则,就是IN谓词的OR等价重写,即改写IN谓词为等价的OR谓词,以更好地利用索引
MySql中的视图重写 物化技术:对子查询进行优化时,可以把子查询的结果保存在内存中,提高查询效率,达到一种物化的效果。 物化视图:是把视图的sql语句部分的数据保存下来,视图只有定义部分,没有数据部分,但是物化视图有数据部分。 视图分为简单视图和复杂视图,是为了为sql的优化进行的说明。
AOP的相关概念 切面(Aspect):一个关注点的模块化,这一关注点的实现可能横切多个对象,而这个模块化的过程,由Interceptor来实现,例如,数据库的事务管理就是一个典型的切面。通知(Advice):在特定的连接点,AOP框架执行的动作,各种通知类型包括:Before通知、After通知、Around通知和Throw通知等。切入点(Pointcut):指定一个通知将被引发的一系列连接点的集合。
Hive命令行工具 Hive支持sequenceFile,说明可以对文件进行压缩,RCFile支持列式存储,做到稀疏存储,减小空间,读取速度快。 图:使用命令hive --hiveconf hive.cli.print.current.db=true;来设置hive()后面跟着数据库的名字 图:使用命令来设置查询时出现列名
hive 分区表、桶表和外部表 1:分区表 图:创建分区表 图:导入数据 图:在HDFS的显示信息分区字段就是一个文件夹的标识 图:在多列上创建分区 图:导入数据 图:在多列上建立分区后在HDFS上形成的结构信息把表中的大多数字段建立为分区字段,可行吗?分区不是越多
Mysql子查询优化技术 1:子查询优化的思路 1.1 子查询合并(Subquery Coalescing) 在某些条件下(语义等价:两个查询块产生同样的结果集),多个子查询能够合并成一个子查询(合并后还是子查询,可以通过其他方式消除子查询), 这样可以把多次表扫描、多次连接减少为单次表扫描和单次连接。 select * from work_list wl wh
搭建自动切换的HA ----------------------------------------------------------------------------------------------2.搭建自动切换的ha(比手工切换ha集群,多了zookeeper集群)------------------------------------------------------------------
Hadoop2搭建可手工配置的HA -----------------------------1.搭建手工切换的ha(比hadoop1集群搭建多了journalnode集群)-----------------------------namenode:haoop0和hadoop1datanode:hadoop2、hadoop3、hadoop4journalnode:haoop0、hadoop1、hadoop2(必须
hadoop2的伪分布式安装 fs.trash.interval用来设置垃圾箱的功能namenode多了一个active状态通过http://localhost:8088/cluster访问所有的应用界面 可以通过上传文件到licence目录下,并运行系统自带的wordcount程序,并把结果输出到目录out中 运行工作的一个统计
Hadoop2体系结构 hadoop1.0需要解决的几个问题: 1:单点故障问题,HDFS和MapReduce都是Master-Slave的结构,但是Master节点都是单点,一旦出现故障,那么集群就不能正常运行。 2:HDFS存储海量数据是按照Block来存储的,整个存储只有一种格式,企业存储受限,企业的数据非常多样,存储起来容易造成资源的浪费。 当namenode所在机器的内存不够时
MapReduce的job调优 1:如果存在大量的小数据文件,那么就会建立很多的Map和Reduce任务,Map和Reduce任务都是进程,进程的创建需要很多的资源消耗,那么会造成Map和Reduce任务的创建时间比计算任务的时间要长,非常不划算。2:推测执行可能会浪费多余的资源,所以为了资源的更充分利用,我们把它关闭,在资源不紧张的时候可以开启。3:开启jvm重用后,就不必开启一些进程,节省了资源和时间。4:增
Hadoop调度器 作业调度器默认为JobQueueTaskScheduler,我们修改为FairScheduler mapred.queue.names指定默认的队列 图:CapacityScheduler运行结果统计
map端join 适用场景:小表可以全部读取放到内存中。两个在内存中装不下的大表,不适合map端join。在一个TaskTracker中可以运行多个map任务。每个map任务是一个java进程,如果每个map从HDFS中读取相同的小表内容,就有些浪费了。使用DistributedCache,小表内容可以加载在TaskTracker的linux磁盘上。每个map运行时只需要从linux磁盘加载数据就行了,
reduce端join操作 实例:输入是两个文件,一个代表工厂表,包含工厂名列和地址编号列;另一个代表地址表,包含地址名列和地址编号列,要求从输入数据中找出工厂名和地址名的对应关系,输出工厂名-地址名表数据样本 图:factory 图:address 图:输出结果package com.ccse.hadoop.join;import java.io.IOEx
自定义分组Group package com.ccse.hadoop.group;import java.io.DataInput;import java.io.DataOutput;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import org.apache.hadoop.conf
自定义排序 package com.ccse.hadoop.sort;import java.io.DataInput;import java.io.DataOutput;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import org.apache.hadoop.conf.C
自定义Partitioner package com.ccse.hadoop.partitioner;import java.io.IOException;import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs
自定义Combiner package com.ccse.hadoop.combiner;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;i
mapreduce中计数器的使用 package com.ccse.hadoop.counter;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;im
使用命令行执行MapReduce package com.ccse.hadoop.cmd;import java.io.IOException;import java.net.URI;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.conf.Configured;
自定义输出多个文件 package com.ccse.hadoop.outputformat;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.util.Iterator;import java.util.StringTokenizer;import org.apac
老api写法的wordcount程序 package com.ccse.hadoop.old;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.util.Iterator;import java.util.StringTokenizer;import org.apache.hadoo
自定义OutputFormat package com.ccse.hadoop.outputformat;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configurati
自定义InputFormat 程序代码如下: package inputformat;import java.io.DataInput;import java.io.DataOutput;import java.io.FileInputStream;import java.io.IOException;import java.net.URI;import java.util.ArrayList;impor
NLineInputFormat实例 package inputformat;import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWrita
KeyValueTextInputFormat实例 package inputformat;import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWrita