首页 文章 精选 留言 我的

精选列表

搜索[安全相关],共10011篇文章
优秀的个人博客,低调大师

Java NIO文件操作--相关类

Buffer类 CharBuffer charBuffer = CharBuffer.allocate(8); charBuffer.capacity(); charBuffer.limit(); charBuffer.position(); 通过allocate()方法创建的Buffer对象是普通Buffer,ByteBuffer还提供了一个allocateDirect()方法类创建直接Buffer。直接Buffer的创建成本比普通Buffer的创建成本高,但直接Buffer的读取效率高! 也就是说直接Buffer适用于长期生存期的Buffer,而不适用于短生存期的Buffer.并且只有ByteBuffer才提供了allocateDirect()方法。 FileChannel类 FileChannel fileChannelIn = fileInputStream.getChannel(); FileChannel fileChannelOut = fileOutputStream.getChannel(); MappedByteBuffer mappedByteBuffer = fileChannelIn.map(MapMode.READ_ONLY, 0, filein.length()); fileChannelOut.write(mappedByteBuffer); 文件锁FileLock fileChannel = new FileOutputStream("a.txt").getChannel(); FileLock fileLock = fileChannel.tryLock(); Thread.sleep(10000);//文件处理 fileLock.release(); 文件锁:可以有效的阻止多个进程并发修改同一个文件。 lock()试图锁定某个文件,如果无法得到文件锁,程序一直阻塞。 tryLock()尝试锁定某个文件,它将直接返回而不是阻塞,如果获得了文件锁,该方法则返回该文件锁,否则返回null。 lock(long postion, long size, boolean shared)对文件从postion开始,长度为size的内容加锁,该方法是阻塞式的。 tryLock(long postion, long size,boolean shared) 非阻塞式的加锁方法,参数同上。 当参数shared为true时,寿命该锁是一个共享锁,他将允许多个进程来读取文件,但阻止其他进程获得对该文件的排他锁。 当参数为false时,表明该锁是一个排他锁,他将锁住对该文件的读写。程序可以调用FileLock的isShared来判断它获得的锁是否是共享锁。 FileVisitor public static void main(String[] args) throws IOException { Files.walkFileTree(Paths.get("D:\\"),new SimpleFileVisitor<Path>(){ @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { System.out.println("正在访问的路径="+dir); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (file.endsWith("FileVisitorTest.java")) { System.out.println("找到目标文件"); return FileVisitResult.TERMINATE; } return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { return super.visitFileFailed(file, exc); } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { System.out.println("访问结束"); return super.postVisitDirectory(dir, exc); } }); } 如示例,可以使用FileVisitor 进行磁盘文件查找。 WatchService public static void main(String[] args) { try { WatchService watchService = FileSystems.getDefault().newWatchService(); Paths.get("D:\\").register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE,StandardWatchEventKinds.ENTRY_MODIFY); while(true){ WatchKey key = watchService.take(); for (WatchEvent<?> event : key.pollEvents()) { System.out.println(event.context()+ "发生了"+event.kind()+"事件"); } boolean vaild = key.reset();//重设WatchKey if (!vaild) {//如果重设失败,退出监听 break; } } } catch (IOException | InterruptedException e) { e.printStackTrace(); } } 使用的是D盘目录进行监听,这个监控文件变化的监听器可以做到对D盘和它的第一级子目录的变化进行监听,对它的子目录内部的变化无法做到监听。 WatchService有3个方法来获取舰艇目录的文件变化事件。 poll():获取下一个WatchKey,如果没有WatchKey发生就立即返回null。 poll(long timeout, TimeUnit unit):尝试等待timeout时间去获取下一个WatchKey。 take() : 获取下一个WatchKey,如果没有WatchKey发生就移植等待。 如果程序需要一直监控,则选择take()方法。如果程序需要监听指定时间,使用poll()方法。 访问文件属性BasicFileAttributeView public static void main(String[] args) { Path testPath = Paths.get(".\\src\\com\\yin\\nio\\AttributeViewTest.java"); BasicFileAttributeView basicView = Files.getFileAttributeView(testPath, BasicFileAttributeView.class); try { BasicFileAttributes basicFileAttributes = basicView.readAttributes(); PrintStr("创建时间:"+new Date(basicFileAttributes.creationTime().toMillis()).toLocaleString()); PrintStr("最后访问时间:"+new Date(basicFileAttributes.lastAccessTime().toMillis()).toLocaleString()); PrintStr("最后修改时间:"+new Date(basicFileAttributes.lastModifiedTime().toMillis()).toLocaleString()); PrintStr("文件大小:"+basicFileAttributes.size()); } catch (IOException e) { e.printStackTrace(); } } private static void PrintStr(String str){ System.out.println(str); } Java NIO2(AIO) JDK1.7 NIO2主要改进了Classic I/O中java.io.File类对文件操作的局限性 NIO2还带来了真正意义上的Asynchronous I/O(异步I/O),具体实现分为文件Asynchronous I/O与网络传输Asynchronous I/O。因此NIO2也称为AIO。 NIO2 在 File 操作方面的升级 Path介绍:URI,FileSystems Paths、Files工具类介绍 WatchService接口:提供了通过应用程序监听操作系统文件变更事件的能力 文件读写 Asynchronous I/O NIO2通过AsynchronousFileChannel提供了异步读写文件的功能。通过AsynchronousFileChannel异步读写文件有CompletionHandler与Future两种方式。 Java 异步 I/O 网络通信实现 NIO2通过引入AsynchronousSocketChannel与AsynchronousServerSocketChannel实现了异步I/O网络通信模型。

优秀的个人博客,低调大师

linux系统相关命令行

一、linux系统简介以及基本概念及操作 (1)ctrl+alt+F1~F6:进行切换 ctrl+alt+F7:返回图形界面 (2)使用Tab键进行:命令补全、补全目录、补全命令参数都是可以的。(当你忘记某些命令的全称时,可以只输入开头的一部分,然后按下Tab键就会补全) (3) ctrl+c:立即停止并恢复到你可控的状态,强行终止当前程序(并不会使终端退出) ctrl+d:键盘输入结束或退出终端 ctrl+s:暂停当前程序,暂停后按下任意键恢复运行 ctrl+a:将光标移至输入行头,相当于Home键 ctrl+e:将光标移至输入行末,相当于End键 ctrl+k:删除从光标所在位置到行末 shift+pgup:将终端显示向上滚动 shift+pgdn:将终端显示向下滚动 (4)恢复之前输入过的命令:↑ (5)你可以使用如下方式来获得某个命令的说明和使用方式的详细介绍: $ man <command_name> 例如:man man;manual pages的缩写:man 二、linux目录结构及文件基本操作 (1)返回上级目录:cd .. 进入你的home目录:cd ~ 使用pwd获取当前路径:pwd (2)linux文件的基本操作: ①新建空白文件eg:touch test 前提是切换到自己的目录下面 ②新建目录:mkdir mydir ③使用cp命令复制一个文件到指定目录:cp test father/son/grandson,复制目录也需要加上-r或者-R ④删除文件eg:rm test,若想删除一些只有读的权限文件,rm会报错,可以使用-f参数强制删除eg:rm -f test ⑤删除目录:也需要加上-r或者-R,eg:rm -r family ⑥移动文件:mv,eg:mv 原目录 目的目录 ⑦重命名文件:mv 旧的文件名 新的文件名 三、文件打包与压缩 (1)tar ①打包:tar -zcvf something.tar something ②解包:tar -zxvf something.tar ③指定路径:-C 参数 (2)zip ①打包:zip something.zip something (目录请加 -r 参数) ②解包:unzip something.zip ③指定路径:-d 参数

优秀的个人博客,低调大师

分布式事务相关问题

分布式事务没有标准答案,只有结合业务场景的解决方案 TCC,XA,JTA,LCN,2PC 1、分布式事务是什么 数据库分库分表之后,保证多个数据库之间的提交和回滚数据的一致性 ,如图,假设一个订单系统,订单数据库和调度数据库是分开的,如何保证订单库和调度库的一致性,就是所谓分布式事务,这里多说一句,单一数据库不存在分布式事务的问题。 2、常用的分布式事务解决方案第一类:XA,JTA,TCC,2PC,这些都是基于两阶段提交的思想 (1)、异步任务,校验数据,对比数据是否正确,通知工作人员,也可以根据代码进行修正是数据(最好实现的方法,但并不是分布式事务的解决方案) (2)、XA只是一个约定协议,不是一个实现,定义了一个协议,两阶段提交的一个协议2PC,实现是其他开源软件的事情(Java,PHP,go,数据库),JTA就是Java中实现分布式事务的一组规范 x/openXA 包含了2PC规范 -> Java阵营根据XA协议,定义了JTA规范-> Atomikos框架进行实现 Java中常用Atomikos在实现,适用场景:一个Java应用实例,操作多个数据库,针对于单体应用,不能用于跨系统之间的协调,如图所示,还是外卖订单的图,如果通过JTA实现,那么就不能跨系统调用,只能是单一系统进行多个数据库的操作 看一下代码中如何使用 此处的数据库连接池,采用了阿里的druid连接池 事务管理交由atomikos进行管理,具体的代码其实百度查有很多例程,此处就不多说了,厂商封装好了atomikos,不仅仅是要求Java实现,还要求数据库支持才行(mysql,oracle,db2)(undo,redo日志),此处我们画一个图来说明一下atomikos的实现原理 第一阶段,准备阶段 第二阶段:提交阶段 优点:数据一致性好 缺点:性能比较低,需要保证两个数据库同时在连接数据库,占用很大的资源。一旦协调员挂掉了,无法进行恢复或者回滚。 互联网项目用这种方法并不多,实在太消耗资源了,占用太多的数据库的链接资源,因为只能是单一系统的应用,限制性很大,分布式事务,更多是应用之间的问题,对此,atomikos提出了一个TCC的解决方案,应用与应用之间的分布式事务 TCC就是Atomikos发出的一篇论文(编程式的分布式事务,需要我们自己写代码来实现) Java应用提供这三个操作接口(通过http/rest方式提供):Try 尝试、Confirm 确认、Concel 取消 每一个都是通过HTTP来实现的,并且中间并不是通过数据库进行回滚数据,而是根据自己的代码进行实现,只需要保证BASE原则就可以,保证最终一致性就可以进行,其实TCC就是一种两阶段提交思想的自己编码实现 就好像是ACID原则那样,参考http://drupalchina.cn/node/1401这边文章 3、MQ(消息队列) 消息队列实现分布式事务的思路: (1)数据一定要投递到MQ(消息队列本身提供确认机制activemq\rabbitmq,rocketmq,kafka...) (2)消息消费的确认机制,消息一定要被正确消费(消息队列ack机制) (3)保障消费处理的幂等性,根据业务逻辑去实现(处理一条消息,就需要保留一条记录,单独一个记录表 ) 4、LCN 开源框架,可以直接到GitHub中学习,目前应用公司不算多

优秀的个人博客,低调大师

迅雷快速下载 Android SDK相关

用AVD Manager升级SDK时,会在线升级,会很慢很慢。 当你看到temp目录下生成了个小文件时,记下文件名,然后在前面加上https://dl-ssl.google.com/android/repository/ ,然后去用迅雷下载,下载完放到 C:\Program Files (x86)\Android\android-sdk-windows\temp 启动AVD Manager 选择安装…… 如:https://dl-ssl.google.com/android/repository/docs-3.0_r01-linux.zip https://dl-ssl.google.com/android/repository/android-3.0_r01-linux.zip 本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/archive/2011/03/07/1973188.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Openstack 之 调整nova相关参数

可以是kolla部署前,也可以在kolla部署后进行配置。如果是kolla部署前,要修改/etc/kolla/config/{nova-compute.conf,nova-api.conf,nova-scheduler.conf,nova-conductor.conf,nova-consoleauth.conf,nova-novncproxy.conf}配置文件,添加以下内容: [DEFAULT] service_down_time = 120 cpu_allocation_ratio = 8.0 //可以按照比例1:8使用VCPU ram_allocation_ratio = 1.5 //可以按照比例1:8使用VCPU reserved_host_disk_mb = 2048 //host保留容量2G reserved_host_memory_mb = 2048 //host保留内存2G allow_resize_to_same_host = True remove_unused_base_images = False image_cache_manager_interval = 0 resume_guests_state_on_host_boot = True //物理主机重启后虚拟机保留上次状态 如果是部署后,需要修改/etc/kolla/{nova-compute,nova-api,nova-scheduler,nova-conductor,nova-consoleauth,nova-novncproxy}/nova.conf 修改的内容与上面一样。上面几个参数,物理主机重启后虚拟机保留上次状态在实际使用中还是比较方便,一般都需要设置,否则物理机重启后,虚拟机要重新手动启动。 本文转自yuweibing51CTO博客,原文链接:http://blog.51cto.com/yuweibing/2071364 ,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册