随笔分类 -  Java

java基础
摘要:synchronized的三种应用方式 一. 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁。 二. 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁。 三. 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象。 synchronize 阅读全文
posted @ 2019-07-15 16:25 是谁扭曲了时空 阅读(1706) 评论(0) 推荐(0)
摘要:1、linux进程有4GB地址空间,如图所示: 3G-4G大部分是共享的,是内核态的地址空间。这里存放整个内核的代码和所有的内核模块以及内核所维护的数据。 2、特权级的概念: 对于任何操作系统来说,创建一个进程是核心功能。创建进程要做很多工作,会消耗很多物理资源。比如分配物理内存,父子进程拷贝信息, 阅读全文
posted @ 2019-07-15 09:39 是谁扭曲了时空 阅读(255) 评论(0) 推荐(0)
摘要:一、引言在日常的开发中,我们可能经常能看到如下的代码: 在Android中,也会看到下面创建AlertDialog代码: 观察上面这两段代码,都有一个共同的特点,就是都可以进行链式操作,这就是我们要学习的Builder模式,下面就来详细学习一下。 二、Builer模式的使用场景在《Effective 阅读全文
posted @ 2019-07-15 08:55 是谁扭曲了时空 阅读(382) 评论(0) 推荐(0)
摘要:发布与订阅模式和观察者模式有以下不同: 观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,生产者与消费者不知道对方的存在,它们之间通过频道进行通信。 观察者模式是同步的,当事件触发时,主题会调用观察者的方法,然后等待方法返回;而发布与订阅模式是异步的,生产者向频道发送一个消息之后,就 阅读全文
posted @ 2019-07-10 12:07 是谁扭曲了时空 阅读(428) 评论(0) 推荐(0)
摘要:一、分布式算法 在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法. 典型的 阅读全文
posted @ 2019-07-09 15:35 是谁扭曲了时空 阅读(444) 评论(0) 推荐(0)
摘要:程序运行时,有六个地方都可以保存数据: 1、 寄存器:这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。 2、 堆栈:存放基本类型的数据和对象 阅读全文
posted @ 2019-07-05 15:31 是谁扭曲了时空 阅读(408) 评论(0) 推荐(0)
摘要:1 - 引言 2 - 常量池 2.1 你真的懂 Java的“字面量”和“常量”吗? 2.2 常量和静态/运行时常量池有什么关系?什么是常量池? 2.3 字节码下的常量池以及常量池的加载机制 2.4 是不是所有的数字字面量都会被存到常量池中?3 - 包装类对象池 =JVM 常量池4 - 字符串池 4. 阅读全文
posted @ 2019-07-05 11:59 是谁扭曲了时空 阅读(11115) 评论(0) 推荐(11)
摘要:LinkedTransferQueue是JDK1.7才添加的阻塞队列,基于链表实现的FIFO无界阻塞队列,是ConcurrentLinkedQueue(循环CAS+volatile 实现的wait-free并发算法)、SynchronousQueue(公平模式下转交元素)、LinkedBlockin 阅读全文
posted @ 2019-07-02 17:04 是谁扭曲了时空 阅读(256) 评论(0) 推荐(0)
摘要:无锁编程 / lock-free / 非阻塞同步 无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。 实现非阻塞同步的方案称为“无锁编程算法”( Non-blocking 阅读全文
posted @ 2019-07-02 16:55 是谁扭曲了时空 阅读(647) 评论(0) 推荐(0)
摘要:1. 引言 在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环 CAS 的方式来 阅读全文
posted @ 2019-07-02 16:48 是谁扭曲了时空 阅读(904) 评论(0) 推荐(0)
摘要:1. 锁的实现 synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。 2. 性能 新版本 Java 对 synchronized 进行了很多优化,例如自旋锁等,synchronized 与 ReentrantLock 大致相同。 3. 等待可中断 当持有 阅读全文
posted @ 2019-06-28 15:09 是谁扭曲了时空 阅读(196) 评论(0) 推荐(0)
摘要:UNIX时间戳:Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp) 是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00 阅读全文
posted @ 2019-06-27 11:00 是谁扭曲了时空 阅读(1841) 评论(0) 推荐(0)
摘要:转自:https://www.seoxiehui.cn/article-45186-1.html 需求: 为满足用户标签的统计需求,小灰利用Mysql设计了如下的表结构,每一个维度的标签都对应着Mysql表的一列:要想统计所有90后的程序员该怎么做呢 转自:https://www.seoxiehui 阅读全文
posted @ 2019-06-26 13:00 是谁扭曲了时空 阅读(475) 评论(0) 推荐(0)
摘要:操作系统会在负责执行映射,用于操作大文件 java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件;java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高 FileChannel提供了map方 阅读全文
posted @ 2019-06-24 18:01 是谁扭曲了时空 阅读(547) 评论(0) 推荐(0)
摘要:一、概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。 二、NIO和IO的主要区别 下表总结 阅读全文
posted @ 2019-06-24 16:18 是谁扭曲了时空 阅读(234) 评论(0) 推荐(0)
摘要:转自:常用工具页面 Java源代码搜索 Grepcode是一个面向于Java开发人员的网站,在这里你可以通过Java的projects、classes等各种关键字在线查看它对应的源码,知道对应的project、classes等信息。 更方便的是,能提供非常多不同版本的源码在线查看、jar包、源码ja 阅读全文
posted @ 2019-06-24 15:22 是谁扭曲了时空 阅读(1555) 评论(0) 推荐(0)
摘要:在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用。 1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。例如,在Class文件中它以CONSTA 阅读全文
posted @ 2019-06-24 15:18 是谁扭曲了时空 阅读(1058) 评论(0) 推荐(0)
摘要:公平锁/非公平锁(多线程执行顺序的维度) 概念理解 公平锁:加锁前先查看是否有排队等待的线程,有的话优先处理排在前面的线程,先来先得。 非公平所:线程加锁时直接尝试获取锁,获取不到就自动到队尾等待。 例子 ReentrantLock 同时支持两种锁 适用场景 更多的是直接使用非公平锁:非公平锁比公平 阅读全文
posted @ 2019-06-24 00:05 是谁扭曲了时空 阅读(256) 评论(0) 推荐(0)
摘要:转自:https://www.cnblogs.com/albert1024/articles/8434741.html Orika是一个简单、快速的JavaBean拷贝框架,Orika使用字节代码生成来创建具有最小开销的快速映射器。 关于: 作为开发人员,我们必须为业务问题提供解决方案,我们希望利用 阅读全文
posted @ 2019-06-05 00:03 是谁扭曲了时空 阅读(584) 评论(0) 推荐(0)
摘要:前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。 正文 添加依赖 在 pom.xml 文件中添加相关依赖: 安装插件 由于 Lombok 采取的注解形式的,在编译后,自动生成相应的方法, 阅读全文
posted @ 2019-06-04 16:39 是谁扭曲了时空 阅读(228) 评论(0) 推荐(0)