沈超琦的博客

STAY HUNGRY,STAY FOOLISH

文章

WebSocket学习(一)

简介 下一个项目需要做一个对于rabbitmq里队列交换机等资源的监控项目,需要用到的技术有rabbitmq的API和websocket协议(其实最主要的是前端的大屏,领导喜欢看大屏哈哈哈哈),其实以前也用过websocket,但是都只是使用,并没有对websocket协议本身有过深入的分析了解,趁这次知识储备的机会对这个协议做一个简单的了解 与HTTP协议的关系 同样作为应用层的协议,WebSocket在现代的软件开发中被越来越多的实践,和HTTP有很多相似的地方,这里将它们简单的做一个纯个人、非权威的比较: 比较 相同点 都是基于TCP的应用层协议。 都使用Request/Response模型进行连接的建立。 在连接的建立过程中对错误的处理方式相同,在这个阶段WS可能返回和HTTP相同的返回码。 都可以在网络中传输数据。 不同点 WS使用HTTP来建立连接,但是定义了一系列新的header域,这些域在HTTP中并不会使用。 WS的连接不能通过中间人来转发,它必须是一个直接连接。 WS连接建立之后,通信双方都可以在任何时刻向另一方发送数据。 WS连接建立之后,数据的传输使用帧来....

Java 8 新特性

Java 8 新特性 1.lambda 表达式 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。 基本的语法格式为: (parameters) -> expression 或 (parameters) ->{ statements; } 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。 简单实例: // 1. 不需要参数,返回值为 5 () -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值 (x, y) -> x – y // 4. 接收2个int型整数,返回....

Spring核心依赖注入

前言 提起Spring,大家肯定不陌生,它是每一个Java开发者绕不过去的坎。Spring 框架为基于 java 的企业应用程序提供了一整套解决方案,方便开发人员在框架基础快速进行业务开发。 在官网中,我们发现它的核心技术之一:Dependency Injection,简称:DI ,翻译过来就是依赖注入。今天我们就来盘一盘它。 在本文中,我们将深入研究 Spring 框架 DI背后的故事,包括 Spring Inversion of Control(控制反转)、 DI 和 ApplicationContext 接口。 基于这些基本概念,我们将研究如何使用基于 java 和基于 XML 的配置来 创建Spring 应用程序。 最后,我们将探讨在创建 Spring 应用程序时遇到的一些常见问题,包括 bean冲突和循环依赖性。 一 控制反转(Inversion of Control) 在学习DI之前,我们先学习一下 IoC(控制反转),接下来的一段可能读起来会让你感觉比较啰嗦,但是要细细体会每一次改变的意图,和我们的解决方案,对于理解控制反转非常重要。 首先来了解下我们通常实例化一个对象的....

[原创]dom4j的指定element获取树结构

最近在做CDA文档(一种医疗机构内部通用的XML格式文档,基于V3模板)的项目,遇到了一个需求,通过指定CDA文档的xpath获取指定xml的树结构. public List<Object> searchByNode(String documentId,String xpath){ List resultList = new ArrayList<>(); String cdacontent = xxxService.getByDocumentId(documentId) .....通过documentId 获取具体的CDA文档 Map map = new HashMap(); map.put("cda","urn:hl7-org:v3"); //指定XML命名空间 SAXReader reader = new SAXReader(); reader.getDocumentFactory().setXPathNamespaceURIs(map); Ducument result = null; InputSource source = new InputSourc....

mybatis一级缓存二级缓存

一级缓存   Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。 为什么要使用一级缓存,不用多说也知道个大概。但是还有几个问题我们要注意一下。   1、一级缓存的生命周期有多长? **  **a、MyBatis在开启一个数据库会话时,会 创建一个新的SqlSession对象,SqlSession对象中会有一个新的Executor对象。Executor对象中持有一个新的PerpetualCache对象;当会话结束时,SqlSession对象及其内部的Executor对象还有PerpetualCache对象也一并释放掉。   b、如果SqlSession调用了close()方法,会释放....

java 中的线程,多线程

多线程 1 什么是线程, 线程与进程的关系 线程是程序的执行路径,或者可以说是程序的控制单元。 一个进程可能包含一个或多个线程,当一个进程存在多条执行路径时,就可以将该执行方式称为多线程。 线程的执行方式大致可分为就绪 (wait),执行(run),阻塞(block) 三个状态,而三个状态的转换实质上是在抢夺 cpu 资源过程中造成的,正常情况下 cpu 资源不会被线程独自占用,因此多个线程在运行中相互抢夺资源,造成线程在上述的三个状态之间不断的相互转换。而这也是多线程的执行方式。 2 同步和异步的区别 同步(Sync) 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作。 根据这个定义,Java 中所有方法都是同步调用,应为必须要等到结果后才会继续执行。我们在说同步、异步的时候,一般而言是特指那些需要其他端协作或者需要一定时间完成的任务。 简单来说,同步就是必须一件一件事做,等前一件做完了才能做下一件事。 异步(Async) 异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。当这个调用完成后,一般通过状态、....

Hello World

记录生活,记录成长,记录美好 想说的有很多,但都说不出来了.贴上一段代码和一句话,希望自己不负韶华吧. public static void main(String[] args){ System.out.println("Hello World!"); } “终其一生,我们只为寻找最初失去的那个人” ——胡塞尼《群山回唱》

STAY HUNGRY,STAY FOOLISH

© 2020 沈超琦的博客

Powered by Solo
Theme solo-sakura by adlered
浙ICP备18010929号

主题 | Theme