Entry

java实现hello/hi聊天程序

不羁岁月 提交于 2020-11-13 07:58:06
1.使用java实现服务器与客户端之间的对话,客户端与服务器 服务器端代码 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.HashMap; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Chat { // 运行在服务端的Socket private ServerSocket server; // 线程池,用于管理客户端连接的交互线程 private

前端科普系列(四):Babel ,把 ES6 送上天的通天塔

倾然丶 夕夏残阳落幕 提交于 2020-11-13 04:59:19
一、前言 在上一节 《CommonJS:不是前端却革命了前端》中,我们聊到了 ES6 Module,它是 ES6 中对模块的规范,ES6 是 ECMAScript 6.0 的简称,泛指 JavaScript 语言的下一代标准,它的第一个版本 ES2015 已经在 2015 年 6 月正式发布,本文中提到的 ES6 包括 ES2015、ES2016、ES2017等等。在第一节的《Web:一路前行一路忘川》中也提到过,ES2015 从制定到发布历经了十几年,引入了很多的新特性以及新的机制,浏览器对 ES6 的支持进度远远赶不上前端开发小哥哥们使用 ES6 的热情,于是矛盾就日益显著…… 二、Babel 是什么 先来看下它在官网上的定义: Babel is a JavaScript compiler 没错就一句话,Babel 是 JavaScript 的编译器。至于什么是编译器,可以参考 the-super-tiny-compiler 这个项目,可以找到很好的答案。 本文是以 Babel 7.9.0 版本进行演示和讲解的,另外建议学习者阅读英文官网,中文官网会比原版网站慢一个版本,并且很多依然是英文的。 Babel 就是一套解决方案,用来把 ES6 的代码转化为浏览器或者其它环境支持的代码。 注意我的用词哈,我说的不是转化为 ES5 ,因为不同类型以及不同版本的浏览器对 ES6

Oracle 11g实时SQL监控 v$sql_monitor

痴心易碎 提交于 2020-11-11 01:56:48
Oracle 11g实时SQL监控: 前面提到,在Oracle Database 11g中,v$session视图增加了一些新的字段,这其中包括SQL_EXEC_START和SQL_EXEC_ID, 这两个字段实际上代表了Oracle 11g的一个新特性:实时的SQL监控( Real Time SQL Monitoring)。 在Oracle 11g之前的版本,长时间运行的SQL可以通过监控v$session_longops来观察,当某个操作执行时间超过6秒, 就会被记录在v$session_longops 中,通常可以监控到全表扫描、全索引扫描、哈希联接、并行查询等操作; 而在Oracle 11g中,当SQL并行执行时,会立即被实时监控到,或者当SQL单进程运行时,如果消耗超过5秒的CPU或I / O时间,它也会被监控到。 监控数据被记录在v$sql_monitor视图中,当然也可以通过Oracle 11g新增的 package DBMS_MONITOR 来主动对SQL执行监控部署。 来看一下主要视图v$sql_monitor的结构: Name Type Nullable Default Comments -- ----------------------- -------------- -------- ------- -------- KEY NUMBER Y STATUS

Vulnhub-靶机-STAPLER: 1

二次信任 提交于 2020-11-10 11:47:56
本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关 靶机下载之后使用仅主机模式加载到本地VMware Workstation工作站,需要发现目标靶机的IP地址,可以使用nmap,netdiscover,或者arp之类的工具 arp-scan 例如:sudo arp-scan -I eth1 -l 当然也是可以使用Windows环境下mac地址扫描工具都是可以的,那么本次演示就是arp-scan工具发现; 地址:https://www.vulnhub.com/entry/stapler-1,150/ sudo nmap -n -p- -sC -sV -T5 -Pn -oN stapler.nmap 192.168.202.15 nmap扫描结果 开放的端口还是很多的,从前面一个一个来,探测到目标靶机开放了21端口并且允许匿名登录,登录上去看看 看到一个文件note 下载下来看到如上信息,得到两个用户名john和elly先放着,继续下面的端口,22端口就先放着,使用gobuster爆破了下目标靶机的目录没发现什么有价值的信息,然后使用nikto扫描了下,发现了两个敏感文件 使用wget下载下来,发现并没有什么作用,继续向下看发现了Samba服务,我们使用命令枚举下信息 enum4linux 192.168.202.15

Java WebSocket

风流意气都作罢 提交于 2020-11-10 08:39:26
本示例的目的,就是通过webSocket向客户端(浏览器端)发送消息. 一、什么是WebSocket   WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。 WebSocket通信协议于2011年被 IETF 定为标准RFC 6455,并被RFC7936所补充规范。 二、通过Java代码实现从服务端发消息给客户端 三、环境说明   java1.7、apache-tomcat-7.0.78、maven   依赖   <dependency>   <groupId>javax</groupId>   <artifactId>javaee-api</artifactId>   <version>7.0</version>   <scope>provided</scope>   </dependency> 四、代码 import javax.websocket.* ; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.Map; import java.util.concurrent

网络篇 思科发现协议CDP-15

本秂侑毒 提交于 2020-11-09 09:27:22
目录 一、 Cisco发现协议概述 二、使用CDP获取设备信息 三、使用CDP实现Cisco设备发现 四、相关的CDP命令 五、实验:使用CDP发现邻接思科设备 总结 一、 Cisco发现协议概述 Cisco发现协议简称CDP,它是思科设备中的 一种信息收集工具 ,常用于获取思科直连设备的相关信息。 CDP是运行在数据链路层的 ,所以说它是 二层协议 。在默认情况下,思科设备启动后,CDP也会自动启动,同时 自动发现运行CDP协议的直连设备 。CDP是一种简单、低开销的协议,它每60秒发送一次,180秒为超时时间。有时候,我们到了一个新布置机房进行维护,但是无法获取机房的设备拓扑图,这个时候可以使用CDP来画出机房的网络拓扑。除此之外,CDP还可以用于排除网络故障。 二、使用CDP获取设备信息 启动CDP进行思科设备发现的时候,我们可以在相关的设备上查看到每台邻接设备的信息: 设备标识符(Device ID):设备的名称,如邻接路由器的名字为R2。 地址列表(IP Address):每种支持的协议最多一个网络层地址,如使用TCP/IP协议栈的192.168.1.2。 端口标识符( Local Intrfce/Port ID):设备的本地与邻接设备的端口。 功能列表(Capability):邻接设备所支持的功能,如设备充当路由器、交换机或防火墙等。 平台( Platform)

Netty源码分析——flush流程

China☆狼群 提交于 2020-11-09 01:12:37
Netty源码分析——flush流程 前言 承接上篇写流程,这篇看下flush流程。之前文章中我们已经提到过,writeAndFlush操作实际上是通过pipeline分别进行了write和flush操作。具体我们就不看了,我们直接看下flush。 flush flush操作同样是通过pipeline最终传递给HeadContext:unsafe.flush();: 123456789101112public final void flush() { //确保不是外部调用 assertEventLoop(); ChannelOutboundBuffer outboundBuffer = this.outboundBuffer; if (outboundBuffer == null) { return; } //添加flush节点 outboundBuffer.addFlush(); //把节点里的数据写到socket里 flush0();} 最主要的其实是两个步骤,上文已经标注了,一个就是添加flush节点,一个就是真正的写操作。 添加flush节点 追进去看下: 1234567891011121314151617public void addFlush() { Entry entry = unflushedEntry; if (entry != null) { if

Netty源码解析 -- ChannelOutboundBuffer实现与Flush过程

蓝咒 提交于 2020-11-09 00:57:37
前面文章说了,ChannelHandlerContext#write只是将数据缓存到ChannelOutboundBuffer,等到ChannelHandlerContext#flush时,再将ChannelOutboundBuffer缓存的数据写到Channel中。 本文分享Netty中ChannelOutboundBuffer的实现以及Flush过程。 **源码分析基于Netty 4.1** 每个Channel的AbstractUnsafe#outboundBuffer 都维护了一个ChannelOutboundBuffer。 ChannelOutboundBuffer,出站数据缓冲区,负责缓存ChannelHandlerContext#write的数据。通过链表管理数据,链表节点为内部类Entry。 关键字段如下 ``` Entry tailEntry; // 链表最后一个节点,新增的节点添加其后。 Entry unflushedEntry; // 链表中第一个未刷新的节点 Entry flushedEntry; // 链表中第一个已刷新但数据未写入的节点 int flushed; // 已刷新但数据未写入的节点数 ``` ChannelHandlerContext#flush操作前,需要先刷新一遍待处理的节点(主要是统计本次ChannelHandlerContext

springboot log4j

吃可爱长大的小学妹 提交于 2020-11-06 02:25:35
一、gradle 排除起步依赖中的logback // 排除全局依赖 configurations { compile.exclude module: 'spring-boot-starter-logging' // all*.exclude group: 'org.gradle.test.excludes', module: 'reports' } 还有一种在部分排除 // 添加起步依赖 implementation ('org.springframework.boot:spring-boot-starter-web' ){ // 排除jar包依赖 // exclude module : 'spring-boot-starter-logging' } 二、新建配置文件,默认放在resource目录下 log4j2-XXXX.xml 可以指定配置文件位置: logging.config = classpath:log4j2-spring.xml 三、修改配置文件 官网: http://logging.apache.org/log4j/2.x/log4j-spring-cloud-config/log4j-spring-cloud-config-client/index.html 如果跟我一样英文不是太好的,可以看这篇博主( 筱光 )的博客 https://blog.csdn.net

Java ThreadLocal

↘锁芯ラ 提交于 2020-11-03 07:54:23
ThreadLocal 0.8532018.12.27 23:04:13字数 1384阅读 6081 Don't forget, a person's greatest emotional need is to feel appreciated. 莫忘记,人类情感上最大的需要是感恩。 在阅读Handler源码时发现了这么一个东西,本想直混在其他博客中一笔带过,但仔细想了下这个东西还是蛮重要的,于是开了这篇博客。 ThreadLocal threadlocal使用方法很简单 static final ThreadLocal < T > sThreadLocal = new ThreadLocal < T > ( ) ; sThreadLocal . set ( ) sThreadLocal . get ( ) threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据,官方解释如下。 /** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread that accesses one (via its * {@code get} or {