Mark

理解Java的NIO

隐身守侯 提交于 2020-12-05 03:15:09
同步与阻塞 同步和异步是针对应用程序和内核的交互而言的。 同步:执行一个操作之后,进程触发IO操作并等待(阻塞)或者轮询的去查看IO的操作(非阻塞)是否完成,等待结果,然后才继续执行后续的操作。 异步:执行一个操作后,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作。 非阻塞是针对于进程在访问数据的时候,根据IO口的状态返回不同的状态值。阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。 阻塞:进程给CPU传达一个任务之后,一直等待CPU处理完成,然后才执行后面的操作。 非阻塞:进程给CPU传达任我后,继续处理后续的操作,隔断时间再来询问之前的操作是否完成。(轮询) 同步异步是结果,阻塞非阻塞是手段。 Java IO的各种流是 同步阻塞 的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 当然,他还有一个更加重要的特性是,多路复用IO。 Java NIO的 同步非阻塞 模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 之前使用futrueModel的就是类似异步IO模型。

Android实现沉浸式状态栏的那些坑

眉间皱痕 提交于 2020-12-03 22:53:59
最近项目需要实现沉浸式的状态栏,其实我在之前就了解过Android的沉浸式,发现有些棘手就放弃了,但是此次是公司的项目需要的,就花了几天把这个问题搞定了,在此记录一下,并mark几个坑。 首先,沉浸式是Android 4.4及以上才有的,在后续的5.0及6.0上面都增加了一些相关支持,于是问题就不太好办了。先看我实现的效果: 首先,在4.4版本添加了WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 和 WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,即透明的状态栏和导航栏,这里一般会配合 android: fitsSystemWindows= "true" android: clipToPadding= "true" 1 2 一起使用,这里只给个链接: http://blog.csdn.net/jdsjlzx/article/details/46778631 于是,下面就说说遇到的问题: 第一坑:状态栏背景色 上面的FLAG_TRANSLUCENT_STATUS 只是把状态栏设置为透明的,但是!但是,状态栏是有背景色的,一些手机的状态栏背景色为透明,而一些手机的状态栏背景色为半透明的黑色,实现的效果如下: 于是在5.0上增加了WindowManager

jvm垃圾回收算法

廉价感情. 提交于 2020-12-03 15:28:13
前言 java相较于c、c++语言的优势之一是自带垃圾回收器,程序开发人员不用手动管理内存,内存的分配和释放完全由gc(Garbage Collector)来做,极大地提高了软件开发效率及程序健壮性(手动管理内存容易造成内存泄漏)。凡事皆有两面性,java gc在给我们带来内存管理便捷性的同时,也面临STW(Stop The World)影响程序吞吐的缺陷。作为java开发人员,只有深入理解jvm垃圾回收的机制,才能在程序性能出现瓶颈时,更好的对程序进行优化。 欢迎学Java和大数据的朋友们加入java架构交流: 855835163 群内提供免费的架构资料还有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的免费直播讲解 可以进来一起学习交流哦 垃圾确定 在垃圾回收之前,jvm需要确定哪些对象已死,即需要当做垃圾被回收。垃圾确认的方法传统的有引用计数法:用一个引用计数器来标记对象当前的引用次数,当引用计数为0时,对象可回收。这种方法有个弊端是无法解决循环引用的问题,如两个对象相互引用则它们永远不会释放。另外一种方法是可达性分析算法,目前主流的语言(java、c#、golang等)都是采用这种方法来判定一个对象是否存活。可达性分析算法的思路是:将一系列根对象作为起点

JVM垃圾回收算法

狂风中的少年 提交于 2020-12-03 15:27:52
一、垃圾收集算法 1.1 标记-清除 首先标记处需要清理的对象,然后回收所有被标记的对象,缺点在于:空间碎片,标记清除后内存中仍存在地址不连续的对象(内存碎片),如果内存碎片过多,会导致为大对象分配空间时无可用空间,触发又一次的GC。 1.2 标记-整理 当标记完待回收对象后,让所有存活的对象都向一端移动,然后直接清理掉端边界意外的内存,**不是直接对可回收对象进行清理。**缺点是整理需要花费一定时间。 1.3 复制 复制算法将内存划分为相等的两块,每次只使用其中一块。当这一块内存用完时,就将还存活的对象复制到另一块上面,然后将已经使用过的内存空间一次清理掉。缺点是内存使用率降为一半,对象存活率较高时,需要多次进行复制操作,效率变低。 1.4 分代收集算法 新生代采用复制算法,在老年代采用“标记-清除”或者“标记-整理”算法。新生代分为Eden区和两个相同大小的Survivor区, 所有新创建的对象都分配在Eden区域中 。当Eden区域满后会触发minor GC,将Eden区仍然存活的对象复制到其中一个Survivor区域中,另外一个Survivor区中的存活对象也复制到这个Survivor区域中,并始终保持一个Survivor区是空的。 一般建议Young区地大小为整个堆的1/4 。下面分别展示了新生代初始化-->Young GC-->执行完毕时的状态。使用了复制算法

Java IO流

可紊 提交于 2020-12-02 05:46:23
[TOC] Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对 数据传输的总称或抽象 。即数据在两设备间的传输称为流, 流的本质是数据传输 ,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。 字节流:一次读入或读出是8位二进制。 字符流:一次读入或读出是16位二进制。 设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。 结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。 输入流和输出流 输入流只能进行读操作,输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。 输入字节流

iOS

爷,独闯天下 提交于 2020-12-01 02:50:23
一、前言   这个星期面临一个网页的需求,需要用到这方面的知识,很久没看过这方面的代码了,记录下吧。   wkwebview的创建和使用就不再提及了,直接看与JS之间的交互吧。 二、内容   1、JS调用OC window.webkit.messageHandlers.<#对象名#>.postMessage(<#参数#>)    // 进行配置控制器 WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; // 实例化对象 configuration.userContentController = [WKUserContentController new ]; // 调用JS方法 [configuration.userContentController addScriptMessageHandler:self name: @" actionEnd " ]; #pragma mark - WKScriptMessageHandler - ( void )userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *

Pytest学习(七)

杀马特。学长 韩版系。学妹 提交于 2020-11-30 12:34:15
Pytest学习(七) - skip、skipif的使用 前言 作为一个java党,我还是觉得pytest和testng很像,有时候真的会感觉到代码语言在某种程度上是相通的,那么今天来说说这两个知识点。 skip和skipif,见名知意,就是跳过测试呗,直白的说就是用于不想执行的代码,标记后,标记的代码不执行。 skip的用法 使用示例:@pytest.mark.skip(reason="不想执行的原因,执行时会输出reason内容") 1、标记在函数方法上 示例代码如下: # 标记在函数上 @pytest.mark.skip(reason="标记在函数上,被标记函数不会被执行!!") def test_case2(): print("我是测试用例2,但我不会执行") 运行结果如下: 2、标记在类中的函数方法上 示例代码如下: class TestClass1(object): def test_case3(self): print("我是用例3") # 标记在类中的函数上 @pytest.mark.skip(reason="标记在类中的函数上,同样也不会执行哦!") def test_case4(self): print("我是测试用例4,但我不会执行") 运行结果如下: 3、标记在类上 示例代码如下: @pytest.mark.skip(reason="标记在类上

element input 封装;避免双向数据流

主宰稳场 提交于 2020-11-30 12:05:03
子组件 其实element的 @input 并不是原生的input 而是基于原生已封装好的值 <template> <div> <el-input :value="localValue" @input="test" size="small"></el-input> <div class="tag">输入多个标签时,请使用英文;区分,最多输入5个标签</div> </div> </template> <script> export default { // model: { // prop: "value", // event: "input" // }, props: ["value"], data() { return {} }, computed: { localValue() { return this.value } }, mounted() { }, methods: { test(a) { console.log(a); this.$emit("input", a) } } } </script> <style scoped lang='scss'> .tag { font-size: 12px; color: red; } </style> 父组件 <tag v-model=questionDTO.tagStr id="tag"></tag> 另外可以参考这篇博文:

youtube-dl命令参考

别等时光非礼了梦想. 提交于 2020-11-27 23:56:44
youtube-dl 命令参数简译 USAGE: youtube - dl [ OPTIONS ] URL [ URL ... ] OPTIONS: 通用选项 - h , -- help 打印帮助文档 -- version 打印版本信息 - U , -- update 更新到最新版 ( 需要权限 ) - i , -- ignore - errors 遇到下载错误时跳过 -- abort - on - error 遇到下载错误时终止 -- dump - user - agent 显示当前使用的浏览器 ( User - agent ) -- list - extractors 列出所有的提取器 ( 支持的网站 ) -- extractor - descriptions 同上 -- force - generic - extractor 强制使用通用提取器下载 -- default - search PREFIX 使用此前缀补充不完整的URLs,例如: "ytsearch2 yt-dl" 从youtube搜索并下载两个关于yt - dl视频 . 使用 "auto" youtube - dl就会猜一个,一般效果等价于 "ytsearch" ( "auto_warning" 猜测时加入警告 ) . 我已知支持的PREFIX:ytsearch ( youtube ) ,

特朗普再批谷歌有偏见

不羁的心 提交于 2020-11-27 11:01:36
美国总统唐纳德·特朗普继续炮轰搜索引擎巨头谷歌,称奥巴马在任时谷歌在首页宣传其国情咨文演讲,却没有同样宣传自己的演讲。谷歌否认了这一说法。 当地时间 8 月 29 日,特朗普通过美国社交平台推特发布了一条视频,视频显示美国前总统巴拉克·奥巴马当任期间,谷歌每年都会在其首页上宣传奥巴马的国情咨文演讲,却没有在 2017 年和 2018 年一样宣传特朗普的演讲。特朗普为这条推特加上了#停止偏见#的标签,继续指责谷歌的反保守主义倾向。 据 CNBC 当天报道,谷歌对此回应称,特朗普在 2017 年的就职演说理论上不算是国情咨文演讲。同样,谷歌也没有在 2009 年宣传过奥巴马的就职演说。   谷歌还称,他们确实于 2018 年 1 月 20 日在自己的首页上宣传了特朗普总统的国情咨文演讲。谷歌的宣传没有出现在“The Wayback Machine”的任何 Google.com 的历史页面存档上,该存档只包括给定日期的一些快照。   CNBC 报道中称,根据“The Wayback Machine”的快照,谷歌确实宣传了奥巴马在 2012-2016 年间的演讲是没有争议的。 上述报道称,特朗普最近的声明反映了保守党对谷歌、脸书、推特等数字平台的广泛观点,即这些平台正在自我审查。政府中寻求对这些平台进行监管的意见也在升温。不过,有专家告诉 CNBC,如果缺乏理由和数据