在有些时候我们需要遍历List,并删除其中的指定元素。这时候我们可能会犯以下错误: for (int i = 0; i < list.size(); i++) { if ("a".equals(list.get(i))) { list.remove(i); }} 这样删除的问题在于,如果集合中有多个需要删除的元素,会发生并没有完全删除的问题。 如果使用增强for循环呢,如下: for(String element : list){ if ("a".equals(element)) { list.remove( ...
【译】Java中的线程间通信
尽管大多数情况下,每个子线程都只需要完成他们自己的任务,但是有时候我们可能希望多个线程共同协作来执行一个任务,这就涉及到了线程间的通信。 本文要讨论如下的方法和类:thread.join(), object.wait(), object.notify(), CountdownLatch, Cyclicbarrier, FutureTask, Callbale等。 我会用几个例子来解释如何在Java中实现线程间通信。 如何使两个线程按一定顺序执行? 如何使两个线程按特定的方式有序相交? 现在有个四个线程:A, B, C和D(直到A, B, C被执行完了,D才会执行,并且A, B, C是同步执 ...
【译】多线程简介
一步步探索并发的世界。 现代计算机有在同一时间处理多项任务的能力。得益于硬件的发展和更加智能的操作系统的支持,无论是处理速度还是响应速度,多线程的特性使得你的程序运行的更快。 创作利用这种能力的软件是件非常迷人的事情,但是困难在于:这需要你理解在你的计算机内部到底发生了什么。首先我先浅显的介绍下线程,一个由操作系统提供的用于施展多线程魔术的工具。就让装逼开始吧。 进程和线程:用正确的方式命名现代操作系统可以同时运行多个程序。这就是为啥你可以在浏览器中阅读这篇文章(一个程序),同时用你的media player听音乐(另一个程序)。每一个程序都被认为是一个正在被执行的进程。操作系统了解很多软件技 ...
【译】当我开始使用React的时候,我希望自己知道这些技巧
自从2013年5月29日正式发布以来,React.js已经占领了互联网。我和很多开发者的成功都要归功于这个神奇的框架,这已经不是啥秘密了。 Medium上有很多React.js的教程,在我开始使用React.js时,我希望这些教程中有一个可以告诉我以下这些小技巧。 使用arrow function时不需要使用.bind(this)一般的,当你有一个受控的组件时,你会像以下示例这样做: class Foo extends React.Component{ constructor( props ){ super( props ); this.handleClic ...
【译】如何正确的阅读代码
如何阅读代码而不扯掉自己的头发 写更多代码 阅读更多代码 每天重复以上 这是我再转行做编程几乎两年后给自己的建议。幸运的是,现在网络上有大量的课程和辅导来教会我们如何编码。不幸的是,现在依旧几乎没有什么指导我们如何阅读代码的资源。这是一个巨大的差距,目前越来越多的毕业生进入到技术领域,对阅读源码的强调从未如此重要。就像Brandon Bloom所说的: 如果代码在你的机器上运行,那就是你的软件,你要为此负责,你必须理解它们。 虽然每一个程序员都应该阅读代码,但是他们并没有。很多程序员选择避免阅读代码的原因是因为阅读别人的代码很难,这让人沮丧,并且让他们觉得自己很蠢。我了解这种感受,因为 ...
解决Android Studio中远程依赖包重复的问题
问题背景我们在引用其他人封装的控件或者开源库的时候,经常会遇到依赖包重复的问题。因为很多人在封装的时候也引用了别人的库,这就难免会产生两个库都引用了相同模块的问题,这时候在build的时候就会失败。如下,我们引入了两个包含com.google.zxing的依赖: implementation 'com.journeyapps:zxing-android-embedded:3.5.0'implementation 'cn.yipianfengye.android:zxing-library:2.2' android developer中介绍如下: 解决办法这种情况下我们要把重复的引用排除。 ...
android中WebView不加载Mixed Content的解决
问题背景在有些业务场景中,需要再android原生APP中嵌入WebView来做,在使用HTTPS时,会发现部分android手机中Mixed Content无法加载。 什么是Mixed Content呢HTTPS 网页中加载的 HTTP 资源被称之为 Mixed Content(混合内容) 混合内容在以下情况下出现:初始 HTML 内容通过安全的 HTTPS 连接加载,但其他资源(例如,图像、视频、样式表、脚本)则通过不安全的 HTTP 连接加载。之所以称为混合内容,是因为同时加载了 HTTP 和 HTTPS 内容以显示同一个页面,且通过 HTTPS 加载的初始请求是安全的。现代浏览器会针 ...
Android error:Must be called from main thread of fragment host
在QMUIFragment中如果不在主线程调用popBackStack();会报出异常Must be called from main thread of fragment host。 因为在跳转时,只能在主线程中进行。 因此可以在handler中利用Looper.getMainLooper()。 示例如下: Handler handler = new Handler(Looper.getMainLooper());class PopBackStackThread implements Runnable { public void run() { po ...
如何修改QMUI中的一些组件UI
几乎半年没有更新了,一方面是最近确实有点忙,另一方面是自己有点懈怠了,除了工作以外,没去积累更多东西,游戏倒是玩了不少。 最近一直在做Android的一些开发,UI使用了开源的UI库QMUI_Android,有的时候会发现在使用其中的某些组件时不知道如何更改其UI的样式。这里把两处修改方法记录一下,以后遇到其他地方也可以参考下思路。 更改popup的背景颜色demo中popup的背景默认是白色的。如果我们需要不同背景颜色的popup该咋办呢。 demo中popup的代码是这样的: if (mNormalPopup == null) { mNormalPopup ...
how-does-blockchain-really-work
区块链实际上是如何工作的?在维基百科上,区块链是这样定义的: 一种分布式的数据库,用于维护一个连续的、不断增长的记录(称为块)列表。 看上去很好很简单,但是它是如何工作的呢? 为了说明区块链,我们将要用到一个名为Blockchain CLI的开源的命令行交互界面。 另外我还创建了一个基于浏览器的版本 安装命令行界面版本如果你还没有安装Node.js 在终端中执行下面的命令: npm install blockchain-cli -gblockchain 你应该会看到👋 Welcome to Blockchain CLI! 和blockchain →提示,表明准备好了接受命令。 块看起 ...