try

Netty序章之BIO NIO AIO演变

喜夏-厌秋 提交于 2020-01-25 03:48:15
Netty序章之BIO NIO AIO演变 Netty是一个提供异步事件驱动的网络应用框架,用以快速开发 高性能 、 高可靠 的网络服务器和客户端程序。Netty简化了网络程序的开发,是很多框架和公司都在使用的技术。更是面试的加分项。Netty并非横空出世,它是在BIO,NIO,AIO演变中的产物,是一种NIO框架。而BIO,NIO,AIO更是笔试中要考,面试中要问的技术。也是一个很好的加分项,加分就是加工资,你还在等什么?本章带你细细品味三者的不同! 流程图: 技术:BIO,NIO,AIO 说明:github上有更全的源码。 源码:https://github.com/ITDragonBlog/daydayup/tree/master/Netty/socket-io BIO BIO 全称Block-IO 是一种 阻塞同步 的通信模式。我们常说的Stock IO 一般指的是BIO。是一个比较传统的通信方式, 模式简单 , 使用方便 。但 并发处理能力低 , 通信耗时 , 依赖网速 。 BIO 设计原理: 服务器通过一个Acceptor线程负责监听客户端请求和为每个客户端创建一个新的线程进行链路处理。典型的一请求一应答模式。若客户端数量增多,频繁地创建和销毁线程会给服务器打开很大的压力。后改良为用线程池的方式代替新增线程,被称为伪异步IO。 服务器提供IP地址和监听的端口

SSM整合 redis 实现缓存管理

我怕爱的太早我们不能终老 提交于 2020-01-25 03:43:02
1.maven依赖 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.6.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 2.spring整合配置 <!-- redis数据源 --> <!-- 加载配置文件 --> <context:property-placeholder location="/WEB-INF/config/redis.properties"/> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大空闲数 --> <property name="maxIdle" value="${redis.maxIdle}"/> <!-- 最大空连接数 --> <property name="maxTotal" value="${redis.maxTotal}"/>

springboot整合redis经典示例

不打扰是莪最后的温柔 提交于 2020-01-25 03:39:11
废话不多说,简短精悍地贴出来。 项目结构图: 步骤如下: (1),如果没有redis 的,先去安装一个redis。下载地址: redis 下载安装包地址 创建一个普通的Springboot项目。 (2)pom 代码。 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId

【Java基础】常用IO流的基本用法演示(持续更新)

主宰稳场 提交于 2020-01-25 02:29:55
文章目录 常用IO流 FileInputStream——FileOutputStream FileReader——FileWriter BufferedInputStream——BufferedOutputStream BufferedReader——BufferedWriter ByteArrayInputStream——ByteArrayOutputStream CharArrayReader——CharArrayWriter StringReader——StringWriter InputStreamReader——OutputStreamWriter ObjectInputStream——ObjectOutputStream PrintStream PrintWriter ZipInputStream——ZipOutputStream SequenceInputStream 常用IO流 类型 说明 文件流 对文件进行读、写操作 :FileReader、FileWriter、FileInputStream、FileOutputStream 缓冲流 在读入或写出时,数据可以基于缓冲批量读写,以减少I/O的次数:BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream 内存流 1.从

还看不懂同事代码?快来补一波 Java 7 语法特性

早过忘川 提交于 2020-01-25 01:47:30
前言 Java 平台自出现到目前为止,已经 20 多个年头了,这 20 多年间 Java 也一直作为最流行的程序设计语言之一,不断面临着其他新兴编程语言的挑战与冲击。Java 语言是一种 静态强类型 语言,这样的语言特性可以让 Java 编译器在 编译阶段 发现错误,这对于构建出一个 稳定安全且健壮 的应用来说,尤为重要。但是也因为这种特性,让 Java 开发似乎变得缺少灵活性,开发某些功能的应用时,代码量可能是其他语言的几倍。Java 开发的不足之处也体现越来越复杂的 JDK 上,越来越复杂的 JDK 让开发者完全理解的难度变的非常大。以至于开发者有时会重复实现一个 JDK 中已经提供了的功能。 为了跟上互联网应用编程发展的脚步, Java 从 9 版本开始调整了 JDK 发布的节奏,JDK 的每次更新都注重 提高生产效率 ,提高 JVM 性能 ,推行 模块化 等,让开发者可以更多的专注于业务本身,而不是浪费过多的时间在语言特性上。 Java 语言的更新要在语言的严谨性和灵活性上找到一个平衡点,毕竟灵活性可以减少编码的复杂度,而严谨性是构建复杂且健壮应用的基石。 Java 7 语言特性 Java 重要的更新版本是在 Java 5 版本,这个版本中增加了如泛型、增强 for、自动装箱拆箱、枚举类型,可变参数、注解等一系列 重要功能 ,但是随后的 Java 6

int.Parse()和Convert.ToInt32之间的主要区别是什么

喜夏-厌秋 提交于 2020-01-25 01:14:09
int.Parse() 和 Convert.ToInt32() 之间的主要区别是什么? 哪一个是首选 #1楼 Convert.ToInt32 有19种重载或19种不同的方式可以称之为。 2010版可能更多。 它将尝试从以下TYPES转换; Object,Boolean,Char,SByte,Byte,Int16,UInt16,Int32,UInt32,Int64,UInt64,Single,Double,Decimal,String,Date 它还有许多其他方法; 一个与数字基数有关,两个方法涉及 System.IFormatProvider 另一方面,Parse只有4个重载或4种不同的方法可以调用该方法。 Integer.Parse( s As String) Integer.Parse( s As String, style As System.Globalization.NumberStyles ) Integer.Parse( s As String, provider As System.IFormatProvider ) Integer.Parse( s As String, style As System.Globalization.NumberStyles, provider As System.IFormatProvider ) #2楼 为澄清打开控制台应用程序

Java Lucene定时更新索引

坚强是说给别人听的谎言 提交于 2020-01-25 00:57:47
需求:每晚2点开始对所有数据建立索引,其它时间,每隔一定的时间更新索引。 经过测试,5000条数据建立索引只需600ms,20000条数据约1000ms...几十万的数据也只需要几秒。 若根据初步方案,白天更新数据索引只更新新添加或者改动的数据,需要将数据库查出的数据于IndexReader中的数据进行检索剔除,此操作耗时较多。初步测试结果:5000条数据需要50s;20000条数据需要220s... 若有20w条数据,则光剔除数据的时间就需要4h,明显行不通。 故还不如直接每次都重建所有索引。 不多说,贴初步方案的代码888: java package net.lucene.buildindex; import java.io.File; import java.util.ArrayList; import java.util.List; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document

PyCharm快速包围

冷暖自知 提交于 2020-01-25 00:22:01
问题描述 想要快速做异常处理,手写try…except太慢了,在代码很长的情况下更容易出错 def divide ( a , b ) : return a / b 解决方案 选中代码块 Code→Surround with 选择对应模块 if:判断,if True: while:判断,while True: try / except:捕捉异常 try / finally:捕捉异常 <editor-fold…> Comments:标签形式的范围注释 region…endregion Comments:范围注释 参考文献 Getting started - Help | PyCharm 来源: CSDN 作者: XerCis 链接: https://blog.csdn.net/lly1122334/article/details/103984515

swift数据库GRDB框架使用(iOS)

ぃ、小莉子 提交于 2020-01-25 00:16:46
创建数据库管理类 DataManager.swift import GRDB struct DataBaseName { /// 数据库名字 static let test = "test.db" } /// 数据库表名 struct TableName { /// 学生 static let student = "student" } /// 数据库连接 class DBManager : NSObject { /// 数据库路径 private static var dbPath : String = { // 获取工程内容数据库名字 let filePath : String = NSSearchPathForDirectoriesInDomains ( FileManager . SearchPathDirectory . documentDirectory , FileManager . SearchPathDomainMask . userDomainMask , true ) . first ! . appending ( "/ \( DataBaseName . test ) " ) //print("数据库地址:", filePath as Any) return filePath } ( ) /// 数据库配置 private static var

04-异常处理-动手动脑

廉价感情. 提交于 2020-01-24 09:52:15
1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。 import javax.swing.*; class AboutException { public static void main(String[] a) { int i=1, j=0, k; k=i/j; try { k = i/j; // Causes division-by-zero exception //throw new Exception("Hello.Exception!"); } catch ( ArithmeticException e) { System.out.println("被0除. "+ e.getMessage()); } catch (Exception e) { if (e instanceof ArithmeticException) System.out.println("被0除"); else { System.out.println(e.getMessage()); } } finally { JOptionPane.showConfirmDialog(null,"OK"); } } } 其输出以下结果: Exception in thread "main" java.lang