bind

java nio详解

蹲街弑〆低调 提交于 2021-02-19 11:41:58
NIO简介 NIO是一种同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio 包,提供了 Channel , Selector,Buffer等抽象。 NIO中的N可以理解为Non-blocking,不单纯是New。它支持面向缓冲的,基于通道的I/O操作方法。 NIO提供了与传统BIO模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好;非阻塞模式正好与之相反。对于低负载、低并发的应用程序,可以使用同步阻塞I/O来提升开发速率和更好的维护性;对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发。 NIO的特性/NIO与IO区别 如果是在面试中回答这个问题,我觉得首先肯定要从 NIO 流是非阻塞 IO 而 IO 流是阻塞 IO 说起。然后,可以从 NIO 的3个核心组件/特性为 NIO 带来的一些改进来分析。如果,你把这些都回答上了我觉得你对于 NIO 就有了更为深入一点的认识,面试官问到你这个问题,你也能很轻松的回答上来了。 1、Non-blocking IO(非阻塞IO) IO流是阻塞的,NIO流是不阻塞的。 Java

SpringBoot项目新建遇到问题整理(一)

梦想与她 提交于 2021-02-19 11:04:02
1.新建了一个SpringBoot项目:只引用需要用到的spring boot相关的jar包,除此之外没有任何的配置 启动application.java报错: APPLICATION FAILED TO START *************************** Description: Cannot determine embedded database driver class for database type NONE Action: If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active). --——————>原因:因为spring boot只要你在pom中引入了spring-boot-starter-data-jpa,他就会默认需要加载数据库相关的配置 你要是没有在配置文件中配置数据库相关信息,它会加载默认的配置(不存在的) 然后就报错了, 所以你要是要用数据库相关的东西 你就完善配置 不用数据库相关的东西

Linux安装nslookup命令

徘徊边缘 提交于 2021-02-19 05:00:19
做DNS的人都知道nslookup命令是做什么用的,windows系统自带的。但是linux系统是不自带这个命令的,需要人手动安装。如果您不记得这是哪个软件包提供这个命令的话,那您还真会有些麻烦了。下面教您如何找到这个命令的软件包。 命令 yum provides */nslookup 就可以找到提供nslookup命令的软件包了。 [root@localhost ~]# yum provides */nslookup Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: mirror01.idc.hinet.net * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base/7/x86_64/filelists_db | 7.1 MB 00:00:01 https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/repodata/7d047e4875dc539bff4e1d0c80773d751fae85c440394eb0a5f3ab65ae55cc1a-filelists.sqlite.bz2: [Errno

10.18 nslookup:域名查询工具

房东的猫 提交于 2021-02-19 04:24:27
功能说明 nslookup命令是常用的域名解析查询工具。 如果系统没有nslookup命令,则需要安装下面的软件包: yum -y install bind-utils 语法格式 nslookup [option] [name] [server] nalookup [选填] [域名/IP] [DNS服务器] 【选项说明】 nslookup有如下两种模式。 交互模式:用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。 非交互模式:针对一个主机或域名仅仅获取特定的名称或所需的信息。 先来看看如何进入交互模式。 直接输入nslookup命令,若不加任何参数,则会直接进入交互模式,此时nslookup会连接到默认的域名服务器(即/etc/resolv.conf的第一个DNS地址)。 交互模式也支持选定不同的域名服务器。只需要将第一个参数设置为“-”,然后第二个参数是设置要连接的域名服务器主机名或IP地址。 表10-18 交互模式下nslookup命令的参数选项及说明 参数选项 解释说明 exit 退出nslookup命令 server <城名服务器> 指定解析域名的服务器地址 set关键字=值 设置查询关键字(城名属性)的值。常见的关键字如下: all(全部)查询城名有关的所有信息 domain=name 指定查询的城名 port=端口号 指定裁名服务器使用的端口号

Linux网络——查看网络连接情况的命令

纵饮孤独 提交于 2021-02-18 18:32:52
Linux网络——查看网络连接情况的命令 摘要:本文主要学习了Linux中用来查看网络连接情况的命令。 hostname命令 hostname命令用于显示和设置系统的主机名称,设置只是临时生效,永久生效需要更改配置文件。 基本语法 修改主机名: 1 hostname 主机名 查看系统信息: 1 hostname [选项] 选项说明 1 - a:显示主机别名。 2 - d:显示DNS域名。 3 - f:显示FQDN名称。 4 - i:显示主机的ip地址。 5 - s:显示短主机名称,在第一个点处截断。 6 -y:显示NIS域名。 使用举例 1 [root@localhost ~]# hostname 2 localhost.localdomain 3 [root@localhost ~]# hostname - a 4 localhost.localdomain localhost4 localhost4.localdomain4 localhost.localdomain localhost6 localhost6.localdomain6 5 [root@localhost ~]# ping命令 ping命令会向目标主机发送ICMP请求包,常用来测试当前主机与目标主机网络连接状况。 基本语法 1 ping [选项] 选项说明 1 - b:允许ping网关地址。 2 - c 数量

你真的了解ES6函数特性么?

末鹿安然 提交于 2021-02-18 11:47:11
hello大家好,又见面了。<br> 假期转瞬即逝,年后开工的第一天,早上是真的不想起床吖,为了不迟到闭着眼睛就穿衣服。<br> 好啦好啦,步入正题啦,打起精神哦! 前言  函数是所有编程语言中重要的组成部分,在Es6出现之前 JavaScript的函数语法一直没有太大的变化,从而遗留了很多问题和隐晦的做法,导致实现一些功能需要编写很多代码。 函数形参默认值  JavaScript函数有一个特别的地方,就是无论在函数形参里定义了多少参数,都可以传入任意数量的参数,但是有的情况下,我们的参数只是可填,这样的话我们还在函数体呢写一堆逻辑从而导致代码冗余,还好Es6版本出现了函数默认值。 我们用Es5和Es6代码来比对一下 Es5处理默认参数 function person(name, age) { name = typeof(name) != "undefined" ? name : `蛙人${+ new Date()}` age = typeof(age) != "undefined" ? age : 24 } person() 上面example中是Es5这样处理默认参数值的,假如我们参数多的话,这么写代码的话会造成非常冗余的,于是Es6就出现函数参数默认值。<br> Es6处理默认参数 function person(name = "蛙人", age = 24) {

springboot整合zookeeper和dubbo

别来无恙 提交于 2021-02-18 09:49:17
序言 dubbo就是个rpc框架,之前都是一直在用,现在稍微总结下以备以后使用。 我就直接贴代码了,代码肯定能运行,如果运行不了那么看我之前的zookeeper配置,或者把我贴的代码重新复制下,实在不行请留言,我看到会回复的。 整体项目结构 项目是父子maven结构,父maven中基础jar包都依赖好了,子maven只需继承父maven,额外依赖自己的jar包就可以,其中 domain 是放实体类的, interfaceapi 是放提供者提供给消费者的接口的。 provider 是提供者 consumer 是消费者,不过真实项目中可能一个模块即是消费者又是提供者。所以自己需要的话直接写就行,用法都一样的。 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>

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy BUG排查

杀马特。学长 韩版系。学妹 提交于 2021-02-18 02:25:18
将某个子项目从war包转化为jar包打包方式后。忘记修改pom.xml中对servlet-api等的修改。 <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>8.0</version> <scope>provided</scope> </dependency> 因此在开发环境中,因为ecplise中自带有javaee-api包。没有发现任何问题,然后在用java -jar方式中运行时,出现BUG java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy 在类似服务器部署环境没法进行debugger的条件下,正好这两天看了 arthas 可以类似aop,监听某方法的调用等。刚好能查看一下这个莫名奇妙的异常信息。 arthas 的操作主要有两步: 打开 arthas options unsafe (对系统级别的类进行增强)。因为sun.reflect.annotation.TypeNotPresentExceptionProxy类是系统类,直接watch监听会报No class or method is affected; watch sun.reflect

boost::asio::ip::tcp实现网络通信的小例子

ⅰ亾dé卋堺 提交于 2021-02-18 02:15:14
同步方式: Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 头文件 #include <boost/asio.hpp> 名空间 using namespace boost::asio; ASIO库能够使用TCP、UDP、ICMP、串口来发送/接收数据,下面先介绍TCP协议的读写操作 对于读写方式,ASIO支持同步和异步两种方式,首先登场的是同步方式,下面请同步方式自我介绍一下: 大家好!我是同步方式! 我的主要特点就是执着!所有的操作都要完成或出错才会返回,不过偶的执着被大家称之为阻塞,实在是郁闷~~(场下一片嘘声),其实这样 也是有好处的,比如逻辑清晰,编程比较容易。 在服务器端,我会做个socket交给acceptor对象,让它一直等客户端连进来,连上以后再通过这个socket与客户端通信, 而所有的通信都是以阻塞方式进行的,读完或写完才会返回。 在客户端也一样,这时我会拿着socket去连接服务器,当然也是连上或出错了才返回,最后也是以阻塞的方式和服务器通信。 有人认为同步方式没有异步方式高效,其实这是片面的理解。在单线程的情况下可能确实如此,我不能利用耗时的网络操作这段时间做别的事情,不是好的统筹方法。不过这个问题可以通过多线程来避免,比如在服务器端让其中一个线程负责等待客户端连接

Asio实现TCP套接字通信

隐身守侯 提交于 2021-02-18 01:50:25
1. boost::asio介绍: (1)Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。Boost.Asio在网络通信抽象了IO概念,可以用它进行同步或者异步的IO网络编程。Boost.Asio可以在大多数操作系统上使用,能同时支持数千个并发的连接。 (2)Asio可以进行异步网络编程,其采用前摄器模式实现异步IO,不需要多线程和锁机制(避免了竞争和死锁)。它内部封装了select、kqueue、poll/epoll、overlappedIO等机制。 (3)io_service是asio库的异步处理处理机制(类似epoll),它负责与操作系统交互,通过调用其run()函数来等待所有的异步操作完成,并为每一个异步操作调用其handler回调函数。它必须先初始化, (4)Asio工作在同步模式:程序发起IO操作请求,随即向IO_service提交请求,由IO_service将请求转交给内核,之后阻塞等待IO操作完成。IO操作完成后由内核通知IO_service,IO_service将结果交给程序。 Asio工作在异步模式:程序发起IO操作请求,随即向IO_service提交请求,由IO_service将请求转发给内核,同时注册handler回调函数,之后立即返回。IO_service的run函数将等待IO操作完成