webp

史上最全单例模式的写法以及破坏单例方式

穿精又带淫゛_ 提交于 2020-08-06 13:47:01
今天跟大家讲一个老生常谈的话题,单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。网上的文章也很多,但是参差不齐,良莠不齐,要么说的不到点子上,要么写的不完整,我试图写一篇史上最全单例模式,让你看一篇文章就够了。 单例模式定义及应用场景 单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 我们写单例的思路是,隐藏其所有构造方法,提供一个全局访问点。 1、饿汉式 这个很简单,小伙们都写过,这个在类加载的时候就立即初始化,因为他很饿嘛,一开始就给你创建一个对象,这个是绝对线程安全的,在线程还没出现以前就实例化了,不可能存在访问安全问题。他的缺点是如果不用,用不着,我都占着空间,造成内存浪费。 public class HungrySingleton { private static final HungrySingleton hungrySingleton = new HungrySingleton(); private

vivo 悟空活动中台

爱⌒轻易说出口 提交于 2020-08-06 09:25:30
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/6gtVR0nVNcZvREjwftZgzA 作者:悟空中台研发团队 【悟空活动中台】系列往期精彩文章: 《 揭秘 vivo 如何打造千万级 DAU 活动中台 - 启航篇 》 主要为大家讲述 vivo 活动中台的能力与创新。 《 悟空活动中台 - 微组件状态管理(上) 》介绍了活动页内 RSC 组件之间的状态管理和背后的设计思路。 《 悟空活动中台 - 微组件状态管理(下) 》探索平台和跨沙箱环境下的微组件状态管理。 《 vivo 悟空活动中台-基于行为预设的动态布局方案 》本文以“满屏”场景下的页面布局思考为切入点,以微组件为元素单元,提供了一种新的布局方案设计思路——基于行为预设的动态布局方案,并详细的分享了设计目的及具体实现方案。 《 vivo悟空活动中台 - 微组件多端探索 》是基于自助多端扩展,也就意味着多端 微 组件选择越丰富,内容越通用,玩法越多样,产品价值也会越高。 一、背景 通过之前悟空活动中台系列文章,大家对微组件、动态布局等技术方案有了一定的了解。本篇我们带大家了解下悟空H5专题性能优化之路。 在移动互联网时代,H5页面加载体验至关重要。消费者行为和观念也会受到页面加载时间的产生显着影响,最明显的就是我们现在很难去等待一个页面加载超过三秒的页面

vivo 悟空活动中台

安稳与你 提交于 2020-08-06 04:06:30
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/6gtVR0nVNcZvREjwftZgzA 作者:悟空中台研发团队 【悟空活动中台】系列往期精彩文章: 《 揭秘 vivo 如何打造千万级 DAU 活动中台 - 启航篇 》 主要为大家讲述 vivo 活动中台的能力与创新。 《 悟空活动中台 - 微组件状态管理(上) 》介绍了活动页内 RSC 组件之间的状态管理和背后的设计思路。 《 悟空活动中台 - 微组件状态管理(下) 》探索平台和跨沙箱环境下的微组件状态管理。 《 vivo 悟空活动中台-基于行为预设的动态布局方案 》本文以“满屏”场景下的页面布局思考为切入点,以微组件为元素单元,提供了一种新的布局方案设计思路——基于行为预设的动态布局方案,并详细的分享了设计目的及具体实现方案。 《 vivo悟空活动中台 - 微组件多端探索 》是基于自助多端扩展,也就意味着多端 微 组件选择越丰富,内容越通用,玩法越多样,产品价值也会越高。 一、背景 通过之前悟空活动中台系列文章,大家对微组件、动态布局等技术方案有了一定的了解。本篇我们带大家了解下悟空H5专题性能优化之路。 在移动互联网时代,H5页面加载体验至关重要。消费者行为和观念也会受到页面加载时间的产生显着影响,最明显的就是我们现在很难去等待一个页面加载超过三秒的页面

iOS之深入剖析YYImage的图片处理原理

眉间皱痕 提交于 2020-08-05 13:23:16
YYImage的使用 特性 支持 WebP、APNG、GIF 类型动画图像的 播放/编码/解码 ; 支持 WebP、PNG、GIF、JPEG、JP2、TIFF、BMP、ICO、ICNS 类型静态图像的 显示/编码/解码 ; 支持 PNG、GIF、JPEG、BMP 类型图片的 渐进式/逐行扫描/隔行扫描解码 ; 支持多张图片构成的帧动画播放,支持单张图片的 sprite sheet 动画 ; 高效的 动态内存缓存管理 ,以保证高性能低内存的动画播放; 完全兼容 UIImage 和 UIImageView,使用方便; 保留 可扩展的接口 ,以支持自定义动画; 每个类和方法都有完善的文档注释。 基本用法 显示动画类型图片 UIImage * image = [ YYImage imageNamed : @"animation.gif" ] ; UIImageView * imageView = [ [ YYAnimatedImageView alloc ] initWithImage : image ] ; [ self . view addSubview : imageView ] ; 播放帧动画 // frame1.png, frame2.png, frame3.png三张图片 NSArray * paths = @ [ @"/ani/frame1.png" , @"/ani

日语学习学会了五十音图,你可以干什么?应该干什么?

戏子无情 提交于 2020-08-05 12:20:42
都说五十音是日语最基本的东西 没错,它就是最基本的 但是千万不能小看这最基本的 因为即便不能成为日语大咖 照样可以厉害到让人眼红 - 学会了五十音 日语小知识https://sourl.cn/Pzx2Sb(复制打开) 你可以在KTV长日语歌,惊艳全场 学会了五十音 你可以对着一大串假名随口就念 不管你看不看得懂 学会了五十音 你可以学着电视剧男女猪脚的样子表白给你的男神女神:带思ki。。。 学会了五十音 当有人再问你”ヌ”这个符号是神马的时候,可以大声的告诉他,这是一个日语的片假名,念nu! 那么学完了五十音图之后,还要做什么呢? 首先,你要有一本书,比如大家常说的大黄书(标准日本语) 其次,你要去下载这本书的音频,没有音频的日语学习,无法想象! 最后,一课一课的跟着书学习。 这里的“跟着书”可不是看起来那么简单,首先你要把课文的意思弄明白,这里面包括本课的单词和语法句型等等,这些都需要你努力记住,注意,除非你有哆啦A梦的记忆面包,不然看一遍是绝对不能记住的。 然后就需要你跟着听力一边听一边读,读一遍是没有效果的,而且这一遍肯定也会读的磕磕巴巴,所以没事就多读书,或者可以一边挂着耳机一边闭着眼跟读,同时脑袋里面回想这句话的意思。为啥要这么做?因为这样有助于听力的练习,同时也可以帮你记住语法和单词。 最后,要把每课的课后习题做完,一定要认认真真的做完

Redis哨兵(Sentinel)模式

陌路散爱 提交于 2020-08-05 08:30:26
Redis哨兵(Sentinel)模式 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。 这不是一种推荐的方式,更多时候,我们优先考虑 哨兵模式 。 一、哨兵模式概述 哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是 哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。 Redis哨兵 这里的哨兵有两个作用 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。 当哨兵监测到master宕机,会自动将slave切换成master,然后通过 发布订阅模式 通知其他的从服务器,修改配置文件,让它们切换主机。 然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。 用文字描述一下 故障切换(failover) 的过程。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为 主观下线 。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作

Python简单分析微信好友

百般思念 提交于 2020-08-04 22:21:23
开发工具 **Python版本:**3.6.4 相关模块: itchat模块; pandas模块; pyecharts模块。 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 相关文件 点赞转化此文后关注公众号:python工程狮,私信回复:“好友”即可获取 额外说明: pyecharts模块安装时请依次执行以下命令: pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-china-cities-pypkg pip install pyecharts 若安装过程中出现: 'utf-8' codec can't decode byte 0xb6 或者类似的编码错误提示。 可尝试修改Python安装文件夹下如下图所示路径下的**__init__.py**文件的第75行代码: 修改为下图所示内容: 主要思路 微信好友数据通过itchat模块获取; 利用pandas模块进行简单的数据分析; 最后利用pyecharts模块将分析结果可视化。 具体实现过程详见源代码。 使用演示 在cmd窗口运行 Analysis_Wechat.py 文件即可。 和之前一样,需要 扫码登录微信 (这就不截图了吧)。 程序运行完后所有图都保存在

Flutter自动注释(尾注释)、 Android Studio自动注释(尾注释)

二次信任 提交于 2020-08-04 19:06:54
一.结果如下图 二. 1.打开Android Studio设置页面或者preferences 2.选择Language&Frameworks 3.选中flutter 4.勾选show closing labels in Dart source code,然后点击ok,就可以美滋滋写Flutter了 三.拓展,如何将flutter背景色修改为黑色 来源: oschina 链接: https://my.oschina.net/songms/blog/4335186

字节Android岗面试:Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么

主宰稳场 提交于 2020-08-04 19:04:27
面试官 : Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么 心理分析 :该问题很难被考到,但是如果一旦问到,100%会回答不上来。开发者很难注意到一个主线程的四循环居然没有阻塞住主线程 求职者: 应该从 主线程的消息循环机制 与Linux的循环异步等待作用讲起。最后将handle引起的内存泄漏,内存泄漏一定是一个加分项 前言 Android的消息机制主要是指Handler的运行机制,对于大家来说Handler已经是轻车熟路了,可是真的掌握了Handler?本文主要通过几个问题围绕着Handler展开深入并拓展的了解。 站在巨人的肩膀上会看的更远。大家有兴趣的也可以到Gityuan的博客上多了解了解,全部都是干货。而且他写的东西比较权威,毕竟也是小米系统工程师的骨干成员。 Questions Looper 死循环为什么不会导致应用卡死,会消耗大量资源吗? 主线程的消息循环机制是什么(死循环如何处理其它事务)? ActivityThread 的动力是什么?(ActivityThread执行Looper的线程是什么) Handler 是如何能够线程切换,发送Message的?(线程间通讯) 子线程有哪些更新UI的方法。 子线程中Toast,showDialog,的方法。(和子线程不能更新UI有关吗) 如何处理Handler 使用不当导致的内存泄露? 回答一:

【opencv4.3.0教程】02之图像的读取、显示、修改及保存

*爱你&永不变心* 提交于 2020-08-04 18:05:20
目录 一、前言 二、图像基本操作 0、啥是API 1、加载图像CV :: imread 1.加载图像是什么? 2.API 2、创建窗口cv::namedWindow 1.创建窗口是什么? 2.API 3.它是必要的吗? 3、显示图像CV :: imshow 1.显示图像是什么? 2.API 4、修改图像 (cv::cvtColor) 1.修改图像是什么? 2.API 5、保存图像 (cv::imwrite) 1.保存图像是什么? 2.API 三、全部代码及结果展示 1、代码 2、运行效果图 五、几个图像基本概念 一、前言 上一篇文章我们讲了安装和配置,这节课我们还是了解几个最基本的操作,包括图像的读取、图像的显示、图像的修改、图像的保存。 如果你已经有了解过OpenCV,那对这些概念可能比较清楚,如果你是一个小白,想入门学习OpenCV4.3.0,那先不要想太多,先跟我一起读懂每一个API,跟我一起学着写代码。 我们这一系列文章,会讲解API,API的功能、API调参、API的原理,但是我们不会讲API的实现细节,如果你对具体实现细节有兴趣,你可以查看源码以及数字图像处理原理。 二、图像基本操作 图像基本操作包括加载,修改,显示,保存。 0、啥是API 从今天这篇文章开始往后,我们会经常讲到API,所以我们要介绍一下,什么是API? API的定义如下: API(