JAVA NIO
JAVA NIO简介JavaNIO (New IO /Non Blocking IO),可以代替标准的Java IO
Java NIO 与 IO的主要区别
通道和缓冲区Java NIO系统的核心在于:通道(channel)和缓冲区(Buffer) 通道表示打开到IO设备(文件,套接字)的连接
若需要使用NIO系统,需要获取用于连接IO设备的通道以及用于容纳数据的缓冲区. 然后操作缓冲区,对数据进行处理
简而言之 channel负责传输 Buffer 负责存储
Buffer除了Boolean 以外,都有对应的类型缓冲区
所有缓冲区的管理方式几乎一致,通过allocate() 获取对应的缓冲区
缓冲区存储数据的两个核心方法put(): 存入数据到缓冲区中
get(): 获取缓冲区中的数据
缓冲区的四个核心属性capacity: 容量,表示缓冲区中最大存储数据的容量,一旦声明 不能改变
position: 表示缓冲区中正在操作数据的位置
limit: 界限,表示缓冲区中可以操作数据的大小 limit后边的数据不能读写
mark: 标记,表示当前position的位置 可以通过reset() ...
VUE基础
VUE基础渐进式JavaScript框架
VUE特点:
遵循MVVM模式
编码简洁,体积小,运行效率高,适合移动/PC端开发
本身只关注UI,可以轻松引入vue插件或者其它第三方库开发项目
与其他前端JS框架的关联
借鉴angular的模板和数据绑定技术
借鉴react的组件化和虚拟Dom技术
VUE拓展插件
vue-cli: 脚手架
vue-resource(axios): ajax请求
vue-router: 路由
vuex状态管理
vue-lazyload: 图片懒加载
vue-scroller: 页面滑动相关
mint-ui:基于vue的UI组件库(移动)
element-ui:基于vue的UI组件库(PC端)
VUE的基本使用1234567891011121314151617181920212223242526272829303132333435363738<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> & ...
Linux nc指令
Linux nc指令netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。
netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。
下面是一些使用netcat的例子.
[A(172.31.100.7) B(172.31.100.23)]
端口扫描端口扫描经常被系统管理员和黑客用来发现在一些机器上开放的端口,帮助他们识别系统中的漏洞。
$nc -z -v -n 172.31.100.7 21-25可以运行在TCP或者UDP模式,默认是TCP,-u参数调整为udp.z 参数告诉netcat使用0 IO,连接成功后立即关闭连接, 不进行数据交换(谢谢@jxing 指点)
v 参数指使用冗余选项(译者注:即详细输出)
n 参数告诉netcat 不要使用DNS反向查询IP地址的域名
这个命令会打印21到25 所有开放的端口。Banner是一个文 ...
网络I/O工作机制
网络I/O工作机制数据从一台主机发送到网络中的另一台主机需要经过很多步骤.首先需要有相互沟通的意向.其次要有能够沟通的物理渠道(物理链路);是通过电话,还是直接面对面交流.再次,双方见面时语言要能够交流,而且双方说话的步调要一致,明白什么时候该自己说话,什么时候该对方说话(通信协议).
TCP状态转化(三次握手四次挥手)(后面更新)
影响网络传输的因素
网络带宽
传输距离
TCP拥塞控制:
JavaSocket的工作机制什么是Socket?
Socket这个概念没有对应到一个具体的实体,它描述计算机之间完成相互通信的一种抽象功能.
主机A的应用程序要能和主机B的应用程序通信,必须通过Socket建立链接,而建立Socket连接必须由底层TCP/IP来建立TCP连接.建立TCP连接需要底层IP来寻址网络中的主机
但是在一台主机上可能运行着多个应用程序,如何才能与指定的应用程序通信就要通过TCP或者UPD的地址也就是端口号来指定.这样就可以通过一个Socket实例来唯一代表一个主机上的应用程序的通信链路了
建立通信链路当客户端与服务端通信的时候,客户端首先要创建一个Socket实例,操作 ...
CURL命令详解
$ curl命令详解
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
1语法:$ curl [option] [url]
常见参数12345678910111213141516-A/--user-agent <string> 设置用户代理发送给服务器-b/--cookie <name=string/file> cookie字符串或文件读取位置-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中-C/--continue-at <offset> 断点续转-D/--dump-header <file> 把header信息写入到该文件中-e/--referer 来源网址-f/-- ...
Spring(四)-AOP
Spring(四)-AOP
什么是AOP?
(1)面向切面编程(方面),利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发效率
(2)不修改源代码方式,在主干功能里添加新功能
AOP底层使用动态代理
(1)有两种的动态代理
有接口的情况,使用JDK动态代理
没有接口的情况,使用CGLIB动态代理
AOP(JDK动态代理)使用JDK动态代理,使用Proxy类里面的方法创建代理对象
调用newProxyInstance方法
方法里面有三个参数:
第一参数,类加载器
第二参数,增强方法所在的类,这个类实现的接口,支持多个接口
第三参数,实现这个接口InnovationHandler,创建代理对象,写增强的方法
编写JDK动态代理代码
(1)创建接口,定义方法
1234public interface UserDao { public int add(int a,int b); public String update(String id);}
(2)创建接口实现类
1234567 ...
运行时数据区及线程
运行时数据区概述以及线程运行时数据区内部结构
内存是非常重要的系统资源 是硬盘和cpu的中间仓库和桥梁, JVM内存布局 规定了java在运行过程中内存申请 分配 管理的策略,保证了JVM的高效稳定运行. 不同的JVM对于内存划分和管理机制存在部分差异 结合JVM虚拟机规范,探讨经典的JVM内存布局
Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁.另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁.
每个线程: 独立包括程序计数器 栈 本地栈
线程间共享: 堆 堆外内存(永久代或元空间, 代码缓存)
线程
线程是一个应用程序里的运行单元 JVM允许一个应用有多个线程并行执行
在HotSpot里 每个线程都与操作系统的本地线程直接映射
当一个java线程准备好执行以后 此时一个操作系统的本地线程也同时创建
java线程执行终止后 本地线程也会回收
操作系统负责所有线程的安排调度到任何一个可用的CPU上 一旦本地线程初始化成功 他就会调用java线程中的run() ...
反编译案例集
反编译11234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586public class Test1 { public static void main(String[] args) { int i=2; int j=3; int k=i+j; }}//javap -vLast modified 2021年3月6日; size 476 bytes SHA-256 checksum 8e654caa67ddc0bcfb09a7b96a365eab397bb819078361cb1b83261628e1c49f Compiled from "Test1.java"public class com.atguig ...
Java序列化相关
Java序列化相关序列化序列化是指把一个Java对象变成二进制内容,本质上就是一个byte[]数组。
为什么要把Java对象序列化呢?因为序列化后可以把byte[]保存到文件中,或者把byte[]通过网络传输到远程,这样,就相当于把Java对象存储到文件或者通过网络传输出去了。
有序列化,就有反序列化,即把一个二进制内容(也就是byte[]数组)变回Java对象。有了反序列化,保存到文件中的byte[]数组又可以“变回”Java对象,或者从网络上读取byte[]并把它“变回”Java对象。
一个Java对象要能序列化,必须实现一个特殊的java.io.Serializable接口,它的定义如下:
12public interface Serializable {}
Serializable接口没有定义任何方法,它是一个空接口。我们把这样的空接口称为“标记接口”(Marker Interface),实现了标记接口的类仅仅是给自身贴了个“标记”,并没有增加任何方法。
Java中serialVersionUID的解释相当于java类的身份证。主要用于版本控制。seria ...
Java集合框架
Java集合框架
昨天的时候 刚好做了个小练习关于集合
那今天就顺便先把集合框架复习了 后面因为用到java集合的地方太多了,经常需要考虑到选择合适的容器
在之后的Java8新特性流操作也为集合提供了更方便的操作方式 等后面再进行整理
容器容器,用来容纳和管理数据
数组就是一种容器,可以放置对象或基本数据类型
优势简单的线性序列,可以快速访问数组元素,效率高. 如果从效率和类型检查的角度讲,数组是最好的
劣势不灵活.容量需要事先定义好,不能随着需求变化而扩容.
数组不能满足我们管理和组织数据的需求,所以需要一种更强大,容量随时可扩的容器来装载我们的对象.
这就是容器(Collection)也称之为集合
容器结构Collection接口集合类的基本接口
两个基本方法
12boolean add(E e);boolean remove(Object o);
Iterator接口包含四个方法
123456789101112public interface Iterator<E> { boolean hasNext(); E next(); de ...