自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

转载 Unicode字符集和UTF-8编码的前世今生

本文是转载,转载地址:https://www.zhihu.com/questio...,真实的原文地址已不可考。很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这...

2019-07-24 09:42:07 270

原创 Spring--面试

1、依赖注入方式:    三种,接口注入,setter注入,构造器注入。2、接口类BeanFactory    体现了spring为提供给用户使用的IoC容器所设定的最基本的功能规范。使用转义符“&”来获取FactoryBean本身。    getBean()、containsBean()、isSingle()、isPrototype()、isTypeMatch()、getType()、g...

2018-05-10 16:40:41 170

原创 Netty--webSocket

    在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道,两者就可以直接互相传送数据了。WebSocket基于TCP双向全双工进行消息传递,在同一时刻,既可以发送消息,也可以接收消息,相比HTTP的半双工协议,性能得到很大提升。    WebSocket的特点:        单一的TCP连接,采用全双工模式通信。        对...

2018-05-02 14:28:50 353

原创 Mybatis--输出结果映射

resultType:    作用:将查询结果按照sql列名pojo属性名一致性映射到pojo中    场合:常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面中遍历list即可。resultMap:    使用association和collection完成一对一和一对多的高级映射(对结果集由特...

2018-04-11 16:10:09 251

原创 数据模型分析思路

1、每张表所记录的数据内容    分模块的对每张表所记录的内容进行熟悉,相当于学习系统需求的过程。2、每张表重要字段的设置    非空字段、外键字段3、数据库级别表与表之间的关系    外键关系4、表与表之间的业务关系    在分析表与表之间的业务关系时,一定是建立在某个业务意义基础上去分析...

2018-04-10 16:15:34 314

原创 Mybatis--SqlSession

SqlSessionFactoryBuilder:SqlSessionFactory:使用单例模式管理SQLSessionFactory(工厂一旦创建,使用一个实例。)SqlSession:    面向用户的接口,提供了很多操作数据库的方法。    线程不安全的?所以最佳应用场合在方法体内,定义成局部变量使用。...

2018-04-09 10:25:38 151

原创 Mybatis和Hibernate本质区别和应用场景

hibernate:是一个标准ORM框架,入门门槛比较高,不需要程序写sql,sql语句自动生成。对sql优化、修改比较困难。应用场景:适用于需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。mybatis:专注sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全ORM框架,虽然程序员自己写sql,mybatis也可以实现映射(输入映射、...

2018-04-09 09:51:50 292

原创 Mybatis--Mybatis框架

SqlMappConfig.xml配置了数据源、事务等mybatis运行环境,mapper.xmlSqlSessionFactory(会话工厂):创建SqlSessionSqlSession(会话):操作数据库Executor(执行器):SqlExecutor内部通过执行器操作数据库mapped statement(底层封装对象):对操作数据库存储封装,包括sql语句,输入参数(java简单类型,...

2018-04-08 10:28:05 114

原创 Mybatis--jdbc原生态问题总结

1,数据库连接,使用时就创建,不使用立即释放,,对数据库频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。    解决方案:使用数据库的连接池管理数据库连接。2,将sql语句硬编码到java代码中,如果sql语句需要修改,需要重新编译java代码,不利于系统维护。    解决方案:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码重新编译。3,向statement中设置...

2018-04-08 09:59:37 152

原创 Mybatis--高级知识

高级结果集映射(一对一,一对多,多对多)mybatis延迟加载mybatis查询缓存(一级缓存、二级缓存)mybatis和springmvc整合mybatis逆向工程

2018-04-08 09:40:58 346

原创 Mybatis--基础知识

对原生态jdbc程序问题总结。mybatis框架原理mybatis入门程序mybatis开发dao两种方法:    原始dao方法开发方法(程序需要编写dao接口和dao实现类)    mybatis的mapper接口(相关当于dao接口)代理开发方法mybatis配置文件SqlMapConfig.xmlmybatis核心:    mybatis输入映射    mybatis输出映射mybatis...

2018-04-08 09:38:55 138

原创 Spring--非注解处理器映射器和适配器

非注解处理器映射器:所有映射器都实现了HandlerMapping接口    org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping    org.springframework.web.servlet.handler.SimpleUrlHandlerMapping多个映射器可以并存,前端控制器判断url能让哪个映射器处理...

2018-04-03 10:43:42 154

原创 Spring--前端控制器源码分析

1,接收请求    调用 void doDispatch(HttpServletRequest, HttpServletResponse) 2,查找Handler    调用HandlerExecutionChain getHandler(HttpServletRequest)3,调用处理器适配器执行Handler,得到MdoleAndView    mav = ha.handle()4,视图渲染...

2018-04-03 10:10:12 178

原创 Hibernate--注解

hibernate里常用注解包括,类注解,属性注解,关系注解,其他的注解    类注解:在注解示例-注解方式的Product中,Product类声明前面有两个注解:@Entity 和 @Table(name = "product_")@Entity 表示这是一个实体类,用于映射表@Table(name = "product_") 表示这是一个类,映射到的表名:product_@Entity@Ta...

2018-03-28 11:36:09 713

原创 Struts--Struts

MVC设计模式的思想就是把Web应用程序分为3个核心模块:模型、视图和控制器。    模型:模型是Web程序中用于表示业务数据进行业务逻辑操作的部分。    视图:视图是用户在Web浏览器中可以看到的界面。不进行业务逻辑的处理,而是把用户提交的数据传递到模型去处理。    控制器:控制器用来接收用户请求,并调用模型和视图最终完成请求。Struts1是在模型JSP+Servlet+JavaBean的...

2018-03-26 16:47:35 134

原创 Struts2--标签库

用户界面标签:生成HTML元素    1,表单标签:生成HTML页面的Form元素,以及普通的表单元素    2,非表单标签:生成页面上的tree、tab等非用户界面标签:进行数据访问、逻辑控制等    1,数据访问标签:输出堆栈中的值、完成国际化等功能    2,流程控制标签:实现分支、循环等流程控制等<%@ taglib prefix="s" uri="/struts-tags" %&g...

2018-03-26 15:50:06 142

原创 Hibernate--悲观锁&乐观锁

悲观锁:    悲观锁假定当多个事务同时访问一个资源时,会出现并发问题。因而为了避免这些问题,悲观锁假定当多个事务在操作一个资源时,都先把该资源锁起来,这样就完全排除了当前事务受其他事务的影响。但是使用悲观锁影响并发性能,所以应该谨慎。使用悲观锁:    在Hibernate中,使用Session的load()、get()方法获取持久化对象时,可以通过给这两个方法加一个参数:LockMode.UP...

2018-03-22 09:45:55 142

原创 Hibernate--事务处理和缓存管理

事务处理:    事务是数据库操作中一个最小的执行单元,它由一组相互依赖的操作行为组成。数据库事务必须具有ACID特征,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。        原子性:是指整个数据库事务是一个不可分割的工作单元。只有事务中所有操作执行成功,该事务才算执行成功。        一致性:...

2018-03-21 20:54:18 240

原创 Hibernate--API

Configuration类:    在hibernate.cfg.xml文件中,通过以下代码就可以把映射文件model.hbm.xml交给Configuration获取映射信息。<mapping resource="model.hbm.xml"/>除了这种方式,还可以在创建Configuration的实力cfg时,通过addResource()方法为其指定映射资源文件为model.h...

2018-03-21 16:58:05 125

原创 Hibernate--实体对象的生命周期

瞬态:    由new操作符创建,且尚未与Hibernate Session关联的对象被认定为瞬时的。瞬时对象和数据库的记录没有任何联系,因而也不会被赋予持久化标识。在应用程序中,如果没有保持对瞬时对象的引用,它会被垃圾回收器销毁。持久态:    一旦一个处于瞬时状态的对象和session相关联,它就转换为持久态。持久的实例在数据库中有对应的记录,并拥有一个持久化标识。在与该session断开连接...

2018-03-21 16:26:56 249

原创 Hibernate--映射文件和配置文件

映射文件:<?xml version="1.0" encoding="UTF-8"?><hibernate-mapping package="com.bms"> <class name="com.bms.User" table="user" discriminator-value="C">

2018-03-21 14:42:52 223

原创 Transmission Control Protocol/Internet Protocol(TCP/IP)

TCP/IP特性:    Connectionless Packet Delivery Service:它是其他网络服务的基础,几乎所有封包交换网络都提供这种服务。TCP/IP是根据信息中所含的地址数据来进行数据传送,它不能确保每个独立路由的封包是可靠和依序的送达目的地。在每一个连线过程中,线路都不是被“独占”的,而是直接映射到硬件地址上,因此特别有效。更重要的是,此种封包交换方式的传送,使得TC...

2018-03-20 16:07:01 1209

原创 Netty--Future和Promise

    Future用于获取异步操作的结果,Netty的Future都是与异步I/O操作相关的,因此,命名为ChannelFuture,代表它与Channel操作相关。ChannelFuture有两种状态:uncompleted和completed。    Promise是可写的Future,Future本身并没有写操作相关的接口,Netty通过Promise对Future进行扩展,用于设置I/O...

2018-03-19 09:56:26 616

原创 EventLoop和EventLoopGroup

    Reactor单线程模型,指所有的I/O操作都在同一个NIO线程上面完成。NIO线程的职责如下。作为NIO服务端,接受客户端的TCP连接;作为NIO客户端,向服务器发起TCP连接;读取通信对端的请求或者应答消息;向通信对端发送消息请求或者应答消息。     Reactor多线程模型,它与单线程模型的最大区别就是有一组NIO线程来处理I/O操作。特点如下。有专门一个NIO线程--Accept...

2018-03-19 09:36:30 412

原创 ChannelPipeline和ChannelHandler

    Netty的Channel过滤器实现原理与Servlet Filter机制一致,它将Channel的数据管道抽象为ChannelPipeline,消息在ChannelPipeline中流动和传递。ChannelPipeline持有I/O事件拦截器ChannelHandler的链表,由ChannelHandler对I/O事件进行拦截和处理,可以方便地通过增删ChannelHandler来实现...

2018-03-16 14:05:34 213

原创 Channel和Unsafe

实际的I/O读写操作都是由Unsafe接口负责完成的。    bind方法主要用于绑定指定的端口,对于服务端,用于绑定监听端口,可以设置backlog参数;对于客户端,主要用于指定客户端Channel的本地绑定Socket地址。    disconnect方法用于客户端或者服务器端主动关闭连接。    close方法,在链路关闭之前需要首先判断是否处于刷新状态,如果处于刷新状态说明还有消息尚未发送...

2018-03-16 10:51:37 289

原创 ByteBuf

从内存分配的角度看,ByteBuf可以分为两类:    堆内存(HeapByteBuf)字节缓冲区:特点是北村的都分配和回收速度快,可以被JVM自动回收;缺点就是如果进行Socket的I/O读写,需要额外做一次内存复制,将堆内存对应的缓冲区复制到内核Channel中,性能会有一定程度的下降。    直接内存(DirectByteBuf)字节缓冲区:非堆内存,它在堆外进行内存分配,相比于堆内存,它的...

2018-03-15 16:28:24 407

原创 HTTP协议

HTTP主要弊端:    HTTP协议为半双工协议,意味着在同一时刻,只有一个方向上的数据传送。    消息冗长而繁琐。HTTP消息包含消息头、消息体、换行符等。HTTP协议的URL格式如下:    http://host[":"port][abs_path]:其中http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址‘port指定一个端口号,为空则使...

2018-03-13 16:27:25 187

原创 编解码技术

评判一个编解码框架的优劣时,往往会考虑以下几个因素:是否支持跨语言,支持的语言种类是否丰富编码后的码流大小编解码的性能类库是否小巧,API使用是否方便使用者需要手工开发的工作量和难度Java序列化的缺点:    1.无法跨语言    2.序列化后的码流太大    3.序列化性能太低因此,通常不会选择Java序列化作为远程节点调用的编解码框架。Google的Protobuf(Google Proto...

2018-03-13 11:50:49 263

原创 Netty--回车换行符解决TCP半包/粘包问题

SocketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024);SocketChannel.pipeline().addLast(new StringDecoder());LineBaseFrameDecoder的工作原理是它依次遍历ByteBuf中的可读字节,判断看是否有"\n"或者"\r\n",如果有,就以此位置为结束位置,从可...

2018-03-12 15:08:56 3240

原创 throw和throws

1.java处理异常方式在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个时候jvm在做的操作就是:创建异常对象,然后抛出,比如:[java] view plain copy int i= 1;  int j = 0;  int res = 0;  res = i/j;//除0错误  System.out.println(res);  这5句代码运行到第四句会中断,因...

2018-03-12 10:45:01 159

原创 Netty应用开发

创建两个NioEventLoopGroup实例:NioEventLoopGroup是个线程组,它包含了一组NIO线程,专门用于网络时间的处理,实际上它们就是Reactor线程组。创建两个的原因是一个用于服务器接受客户端请求,一个用于进行SocketChannel的网络读写。创建ServerBootstrap对象,它是Netty用于启动NIO服务端的辅助启动类,目的是降低服务端的开发复杂度,进行服务...

2018-03-12 10:40:57 135

原创 NIO

1.缓冲区Buffer    在NIO库中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的;在写入数据时,写入到缓冲区中。任何时候访问NIO中的数据,都是通过缓冲区进行操作。2.通道Channel    Channel是一个通道,它就像自来水管一样,网络数据通过Channel读取和写入。通道与流的不同之处在于通道是双向的,流只是在一个方向上移动(一个流必须是InputStream...

2018-03-09 11:09:07 144

原创 伪异步I/O

采用线程池和任务队列可以实现伪异步的I/O通信框架。    当有新的客户端接入的时候,将客户端的Socket封装成一个Task(该任务实现java.lang.Runnable接口)投递到后端的线程池中进行处理,JDK的线程池维护一个消息队列和N个活跃线程对消息队列里的任务进行处理。由于线程池可以设置消息队列的大小和最大线程数,因此,它的资源占用是可控的,无论多少个客户端并发访问,都不会导致资源的耗...

2018-03-07 17:30:51 221

原创 BIO

采用BIO通信的模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的连接,它接受到客户端连接请求之后为每一个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出流返回应答给客户端,线程被销毁。这就是典型的一请求一应答通信模型。该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发访问量增加后,服务端的线程个数和客户端并发访问数呈1:1的正比关系,由于线程是java虚拟机非常宝贵的系...

2018-03-07 15:04:45 184

原创 JAVA--Comparable&compareTo

Comparable:public interface Comparable<T> //Comparable就是一个泛型接口public int compareTo() //compareTo方法就构成了整个Comparable源码的唯一的有效方法Comparator:public interface Comparator<T> //Comparator...

2018-03-01 17:19:57 275

原创 Hibernate--一级缓存&二级缓存

      缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。   缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存...

2018-03-01 17:19:27 144

原创 CSS--引入方式

在HTML中引入CSS的方法主要有四种,它们分别是行内式、内嵌式、链接式和导入式。1.行内式行内式是在标记的style属性中设定CSS样式。这种方式没有体现出CSS的优势,不推荐使用。2.内嵌式嵌入式是将CSS样式集中写在网页的<head></head>标签对的<style></style>标签对中。格式如下:<head><sty...

2018-03-01 15:33:27 283

原创 CSS--块元素

可以设置Width 和 Height,竖直方向的maigin,padding有,也可以设置。块元素(block element)address - 地址blockquote - 块引用center - 举中对齐块dir - 目录列表div - 常用块级容易,也是CSS layout的主要标签dl - 定义列表fieldset - form控制组form - 交互表单h1 - 大标...

2018-03-01 11:58:55 177

原创 CSS--inline(内联元素)

不能设置width,height,竖直方向的margin,padding没有,也不能设置。 内联元素(inline element)a - 锚点abbr - 缩写acronym - 首字b - 粗体(不推荐)bdo - bidi overridebig - 大字体br - 换行cite - 引用code - 计算机代码(在引用源码的时候需要)dfn - 定义字段em - 强调...

2018-03-01 11:57:14 4301

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除