三劫散仙

有问题关注微信公众号:我是攻城师(woshigcs)

18个高效使用Google搜索的技巧

前言 如果把浩瀚的互联网资源比喻成是一个图书馆,那么google搜索引擎毫无疑问是这个图书馆的导航中心,通过google可以轻而易举得检索到绝大多数你需要的资料,然而大多数人可能并没有充分发挥谷歌搜索的潜力。 如何才能更加高效,快速的利用好谷歌这个搜索引擎呢?这里有18个技巧用来提升你的检索效...

2019-03-22 19:58:23

阅读数 36

评论数 0

Apache Flink在阿里的使用(译)

Flink是未来大数据实时数据处理领域的首选框架,本文原文是阿里巴巴的搜索团队总监Xiaowei Jiang在Flink Forward 2016大会上分享的内容,后来被记录并移到Flink公司官网的Blog上(注意这个不是社区的官网,原名叫data Artisans,被阿里收购后改为verv...

2019-02-21 21:21:21

阅读数 225

评论数 0

为什么单线程Redis性能也很出色

高性能的服务器,不一定是多线程实现的,也就是说多线程不一定比单线程效率高,这得分具体的情况。以redis为例,核心处理请求的线程只有一个,所以我们常常理解其仅仅只有一个线程,但准确来说其实并不是单线程的,比如日志的备份需要单独的fork一个进程或者线程去做备份等,那么redis何来单线程还能达到...

2019-01-21 18:00:47

阅读数 136

评论数 0

如何扩展python的logging组件支持json日志输出

这两天在优化公司一个python的项目,顺便研究了一下如何将python日志转成json格式,原来在Java的项目中搞过类似的事情,知道日志转成json之后有很多便利的之处,最常见的就是可以直接对接各种日志分析系统,如开源的ELK,将数据导入之后就能快速的进行查询和分析,方便做各种统计,监控或报警...

2019-01-10 21:54:58

阅读数 184

评论数 0

为什么Java里面String类是不可变的

在Java里面String类型是不可变对象,这一点毫无疑问,那么为什么Java语言的设计者要把String类型设计成不可变对象呢?这是一个值得思考的问题 Java语言的创建者James Gosling,曾经在一次采访中被人问到:什么时候应该使用不可变对象(immutable object),他回...

2019-01-06 18:39:28

阅读数 422

评论数 1

关于Java里面volatile关键字的重排序

Java里面volatile关键字主要有两个作用: (1)可见性 (2)禁止指令重排序 第一条可见性比较容易理解,就是使用volatile修饰的共享变量,如果有一个线程修改了值,其他的线程里面是立即可见的。原理是对volatile变量的读写,都会强制线程操作从主内存。 第二条禁止指令重排序...

2019-01-04 18:44:57

阅读数 61

评论数 0

操作系统之CPU知识扫盲

(上图是一个拥有两个物理cpu的主板电路,图片来源于网络) 前言 CPU的英文全称是(Central Processing Unit),中文意思翻译中央处理器,是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据。计算机的可编程性主要是指对中央处理器的编程。 关于冯·诺...

2018-12-22 13:58:42

阅读数 186

评论数 0

关于Linux进程的基础知识

前言 在计算机里面,一个进程通常指的是一个运行程序的实例,它包含程序代码和其活动。依赖于具体的操作系统,一个进程启动后通常由若干个线程组成,多个线程可以同时并发的执行程序的指令,进程里面第一个启动的线程,通常称为主线程。 进程的类型 前台进程 通常也指交互进程,这些进程一般都是通过linu...

2018-12-17 16:04:18

阅读数 50

评论数 0

多个线程如何轮流打印ABC特定的次数?

之前的一篇文章,我给出了关于多线程应用的几个例子: 都是基于Java里面Lock锁实现的,分别是: (1)两个线程轮流打印奇数和偶数 (2)多个线程模拟买票 (3)模拟生产者消费者 今天再抛砖引玉,思考一下如何在多个线程中,轮流打印特定顺序的信息多少次。 这类问题其实并不难,只要掌握了...

2018-12-11 20:43:50

阅读数 94

评论数 0

再谈方法调用与堆栈

再谈方法调用与堆和栈 在JVM里面,最重要的两个运行时数据区,无非就是堆和栈了。 关于堆 堆内存是被多个线程共享的,而栈内存是线程私有的。堆主要用来存储运行时所有的对象数据和各种数组,简单点说通过new创建的实例,都会在堆上分配空间。堆在虚拟机启动时创建,并且堆具有自动垃圾回收的功能,在Ja...

2018-11-17 14:20:15

阅读数 103

评论数 0

聊聊Java里面的引用传递

聊聊Java里面的"引用传递" 长久以来,在Java语言里面一直有一个争论,就是Java语言到底是值传递(pass-by-value)还是引用传递(pass-by-reference),有的人说是值传递,有的人说是引用传递,两边各执一词,从而误导了很多开发者,...

2018-11-16 21:33:46

阅读数 37

评论数 0

理解计数排序算法的原理和实现

计数排序(Counting sort)是一种稳定的线性时间排序算法,其平均时间复杂度和空间复杂度为O(n+k),其中n为数组元素的个数,k为待排序数组里面的最大值。同样具有线性时间排序的算法还有桶排序和基数排序,这一点不要搞混。 计数排序不是基于比较的排序,所以它的排序效率是线性的,...

2018-10-11 10:03:34

阅读数 27

评论数 0

理解计数排序算法的原理和实现

计数排序(Counting sort)是一种稳定的线性时间排序算法,其平均时间复杂度和空间复杂度为O(n+k),其中n为数组元素的个数,k为待排序数组里面的最大值。同样具有线性时间排序的算法还有桶排序和基数排序,这一点不要搞混。 计数排序不是基于比较的排序,所以它的排序效率是线性的,在特定的场景...

2018-10-11 09:57:47

阅读数 62

评论数 0

深入理解Java类加载器机制

前言 Java里面的类加载机制,可以说是Java虚拟机核心组件之一,掌握和理解JVM虚拟机的架构,将有助于我们站在底层原理的角度上来理解Java语言,这也是为什么我们学习一个新的知识时,如果不理解原理全靠死记硬背,我相信过不了几天便会忘记的一干二净。 Java是一门跨平台的语言,而JVM虚拟机...

2018-09-25 10:06:24

阅读数 94

评论数 0

理解Java并发工具包线程池的设计

为什么需要线程池? 答:主要原因是因为创建一个线程开销太大,尤其是对大量的小任务需要执行这种场景。 在Java里面创建一个线程,需要包含的东西: (1)它为一个线程堆栈分配内存,该堆栈为每个线程方法调用保存一个帧 (2)每个帧由局部变量数组,返回值,操作数栈,常量池组成 (3)某些JVM...

2018-09-12 21:25:58

阅读数 223

评论数 0

理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略

### 前言 理解HashMap和ConcurrentHashMap的重点在于: (1)理解HashMap的数据结构的设计和实现思路 (2)在(1)的基础上,理解ConcurrentHashMap的并发安全的设计和实现思路 前面的文章已经介绍过Map结构的底层实现,这里我们...

2018-09-06 11:31:21

阅读数 39

评论数 0

理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略

前言 理解HashMap和ConcurrentHashMap的重点在于: (1)理解HashMap的数据结构的设计和实现思路 (2)在(1)的基础上,理解ConcurrentHashMap的并发安全的设计和实现思路 前面的文章已经介绍过Map结构的底层实现,这里我们重点放在其扩容方法, 这...

2018-09-06 11:25:56

阅读数 1752

评论数 1

关于Java里面多线程同步的一些知识

# 关于Java里面多线程同步的一些知识 对于任何Java开发者来说多线程和同步是一个非常重要的话题。比较好的掌握同步和线程安全相关的知识将使得我们则更加有优势,同时这些知识并不是非常容易就能熟练掌握的,实际上写出正确的并发代码是一件比较困难的事情。在Java的自带的库里面,已经包含了非常多实用...

2018-07-18 10:20:26

阅读数 114

评论数 0

关于Java里面多线程同步的一些知识

# 关于Java里面多线程同步的一些知识 对于任何Java开发者来说多线程和同步是一个非常重要的话题。比较好的掌握同步和线程安全相关的知识将使得我们则更加有优势,同时这些知识并不是非常容易就能熟练掌握的,实际上写出正确的并发代码是一件比较困难的事情。在Java的自带的库里面,已经包含了非常多...

2018-07-18 09:45:00

阅读数 14

评论数 0

Java单例模式之双检锁深入思考

# Java单例模式之双检锁剖析 ### 前言 单例模式在Java开发中是非常经典和实用的一种设计模式,在JDK的内部包的好多api都采用了单例模式,如我们熟悉的Runtime类,单例模式总的来说有两种创建方式,一种是延迟加载的模式,一种是非延迟加载的模式,今天我们来学习一下基于双检锁...

2018-07-08 12:25:43

阅读数 43

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭