Java基础
文章平均质量分 54
惜暮
这个作者很懒,什么都没留下…
展开
-
Caffeine高性能缓存设计
Caffeine高性能缓存设计是否需要缓存选择合适的缓存Caffeine 的使用Caffeine高性能设计W-TinyLFU 淘汰算法的整体设计LRU和LRU的缺点TinyLFU统计频率Count–Min Sketch算法频率统计Count–Min Sketch的保新机制增加一个小window淘汰策略expireEntries 方法evictEntries 方法Pacer in TinyLFU异步...原创 2020-04-25 22:24:14 · 3122 阅读 · 1 评论 -
Java对象的序列化与反序列化
1.什么是序列化与反序列化?序列化:指将对象的状态数据以字节流的形式进行处理,在文件中长期存储。 反序列:从字面上就能知道,指的就是在需要的时候从文件中获取该对象的信息以重新获得一个完全的对象。2.序列化与反序列化的作用?(1)永久性保存对象,把对象通过序列化字节流保存到本地文件中。 (2)通过序列化在网络中传递对象 (3)通过序列化在进程间传递对象3. 实现序列化的两种接口(1)Ser原创 2017-01-16 14:18:59 · 484 阅读 · 0 评论 -
Java的数组
本文主要说明关于Java的以下问题: (1) 数组的初始化 (2) 二维数组获取行数和列数 (3)返回数组1. 数组的初始化对于数组的定义有两种形式:int[] a1;//或则是:int a1[];在Java中我们更加倾向于使用第一种。 因为它表示是一个数组的数据类型。编译器在定义时不允许指定数组的大小,因为在定义时并没有给数组分配任何的空间,只是定义了一个对数组的引用。 对原创 2017-02-08 19:24:45 · 456 阅读 · 0 评论 -
Java的static关键字
这篇博文详细的总结Java中 static 关键字的作用。 1) static 变量 2)static 方法 3)static 代码块 4)static 静态内部类原创 2017-02-08 20:20:35 · 337 阅读 · 0 评论 -
线程安全的单例模式也可以很精彩
这篇博客以多种方式实现单例模式,包括非线程安全、线程安全的单例模式以及线程安全的优化。 饿汉式单例; 懒汉式单例(延迟初始化);(线程不安全) 线程安全的单例-synchronized方法 线程安全的单例-同步代码块 线程安全的单例-显式锁ReentrantLock进一步减小锁的粒度 线程安全的单例-DCL(double check lock)首先可以参考一下我原创 2017-01-22 22:59:55 · 2407 阅读 · 1 评论 -
Java多线程问题总结
这篇博客是在看了微信公众号给我推送的一篇博客之后,然后根据自己的理解做的一个总结,也可以说是在别的blog的一个再总结: 参考博客:http://www.cnblogs.com/xrq730/p/5060921.html主要是关于Java多线程中的40个问题的总结:多线程有什么用?创建线程的方式start()方法和run()方法的区别Runnable接口和Callable接口的区别原创 2017-01-24 16:34:05 · 913 阅读 · 1 评论 -
为一线互联网而奋斗
Java中集合框架的源码和实现机制Java的NIO中selector的实现原理;再研究一下netty的源码;Java中并发包的源码;Spring的IOC原理,看一下这部分的源码;分布式程序是个什么情况。原创 2016-12-09 23:54:11 · 673 阅读 · 0 评论 -
Java的回调函数
最近有用到guava包的并发类,发现里面大量的用到了回调函数,突然就发现好多地方都用到了回调函数用到的思想,顺便就整理了一下,搞明白了回调函数是个什么东西。 简单点说,回调就是:A类中调用B类中的某个方法c,然后B类中反过来调用A类中的方法d,d这个方法就叫回调方法。这样子说可能刚开始看不能理解,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式:Class A实现接口CallBac原创 2017-01-29 14:13:51 · 846 阅读 · 3 评论 -
Java中网络IO的实现方式-BIO、NIO、AIO
在网络编程中,接触到最多的就是利用Socket进行网络通信开发。在Java中主要是以下三种实现方式BIO、NIO、AIO。 关于这三个概念的辨析以前一直都是好像懂,但是表达的不是很清楚,下面做个总结完全辨析清楚。1. BIO方式首先我用一个较为通俗的语言来说明: BIO 就是阻塞IO,每个TCP连接进来服务端都需要创建一个线程来建立连接并进行消息的处理。如果中间发生了阻塞(比如建立连原创 2017-02-26 13:25:33 · 2774 阅读 · 0 评论 -
如何捕获java线程中的逃逸的异常
由于Java线程的本质特征,当抛出异常的时候就终止了如果再进行catch,都不在一个线程里面,所以无法捕捉到异常。Java线程中,要在run()方法中把一切的异常都处理掉,可以使用try-catch块。不能让这个线程抛出异常,因为如果我们不使用特殊的方式的话,我们是无法捕获从这个线程中逃逸的异常的。异常一旦抛出了,那么这个线程就会停止运行,但是不会影响主线程和其它的线程。因为主线程和其它的线程都不知原创 2017-03-11 16:08:45 · 4864 阅读 · 1 评论 -
IDEA下maven编译打包Java项目成jar包但是resource下配置文件打包不成功
今天在IDEA下打包一个Java项目,准备打包成jar包直接执行,打包之后运行时候一直提示resource下资源文件找不到,但我又确实配置了的,而且在IDEA上可以运行,但是打包成jar包之后就运行不了了。后来百度,发现对于resource下文件(properties等配置文件)需要在POM文件中配置resources配置:<resources> <resource> <di原创 2017-10-16 22:47:33 · 17348 阅读 · 0 评论 -
Java8内置函数式接口
Java8内置函数式接口技术积累/JavaJava8里面新增的一个非常重要的特性就是函数式接口,functional Interface。 函数式接口往往与lambda表达式一起使用。下面介绍一下Java8中新增的常用的函数式接口:1. Predicates先给出这个接口在JDK8中的简化定义:@FunctionalInterfacepublic interface Predicate<T> {原创 2017-11-24 19:22:58 · 742 阅读 · 2 评论 -
Java的动态代理
1、代理代理是基本的设计模式,有一些操作你不想整合到逻辑代码里面,因此需要代理来做这个事情。例如:日志、监控等下面将演示一个简单的代理:package test;interface Interface { void doSomething(); void somethingElse(String arg);}class RealObject implements Interface原创 2017-01-16 10:47:40 · 359 阅读 · 0 评论 -
Java的反射
本文主要围绕以下几个点来详解反射: 1、反射机制是什么? 2、反射机制能做什么? 3、Java中反射的API以及应用1.反射机制是什么?借用百度百科的定义: 反射机制是在运行状态中: 1、对于任意一个类,都能够知道这个类的所有属性和方法; 2、对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。之所以强原创 2017-01-16 00:34:15 · 449 阅读 · 0 评论 -
斜杠和反斜杠
一直把斜杠和反斜杠搞混,这里来做一下记录,方便每次混了就来查一下:/ 这个是斜杠\ 这个是反斜杠原创 2016-05-23 19:38:30 · 378 阅读 · 0 评论 -
Class对象
Java程序运行时类型信息RTTI可以使我们在程序运行时发现和使用使用类型信息。Class对象Class对象是一个特殊的对象,每个类都有一个且仅有一个Class对象。Class对象就是用来创建类的所有“常规”实例对象的,Java通过Class对象来执行其RTTI。对于每个新类,首先JVM编译生成.class文件,当我们使用一个类的实例时,JVM首先检查这个类是否已经加载到内存中。如果没有加载到内存中原创 2017-01-15 17:04:28 · 402 阅读 · 0 评论 -
Class对象的泛化
Class对象的泛化1、 为什么需要泛化? 代码在编译时就可以进行类型检测,不需要等到运行时才检测类型。2、 例子:package test;/** * Created by louyuting on 17/1/15. */class Second{ static { System.out.println("Loading Second"); }}class原创 2017-01-15 19:14:37 · 805 阅读 · 0 评论 -
Unix下管道实现进程间通信
1.进程间利用管道通信的应用场景主要是数据传输:一个进程需要将数据发送给另外一个进程;2. 管道通信:一个进程在管道的尾部写入数据,另一个进程从管道的头部读出数据。管道包括无名管道和有名管道两种,前者只能用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。下面用一个示意图来表示: 3. 管道通信的特点管道通讯是单向的,先进先出,有固定的读端和写端。数据被进程从管道读出原创 2016-12-05 12:39:41 · 3687 阅读 · 0 评论 -
Mac下Java的native方法以及JNI调用C语言
1.native方法最近在读JDK NIO的源代码的时候发现了很多的native方法,这些方法都只给出了native修饰的定义,并没有给出实现体,并且也没有实现体,形式上和接口很类似。但是这些其实是特定的native方法,那么什么是native方法呢?下面给出以下示例://sun.nio.ch;包里面的IOUtil工具类下面有一些native方法static native boolean rand原创 2016-12-05 21:42:53 · 9369 阅读 · 0 评论 -
Java的transient关键字
transient这个关键字我们一般很少用到,但是我再阅读JDK源码的时候常常看到这个关键字,在这里总结一些这个关键字的用法。这个关键字主要是用于对象的序列化的。transient是字段类型修饰符,只能修饰变量,而不能修饰方法和类。被transient关键字修饰的变量不能再被序列化,静态变量不管是否被transient修饰,均不能被序列化。一旦变量被transient修饰,变量将不再是对象持久原创 2016-12-20 10:39:50 · 474 阅读 · 0 评论 -
Java的hashCode()函数
这几天在看HashMap的源码时,发现这个Map的实现类里面大量的用到了hashCode的知识,以前也经常的听到这个函数,知道是Object类的方法,以前也看过关于这个函数的知识,但是没有做过记录,这次正好就做个记录,方便后面理解HashMap和LinkedHashMap源码。hashCode所谓的hashCode也就是hash码。Hash是散列的意思,就是把任意长度的输入,通过散列算法变换成固定长转载 2016-12-23 19:36:16 · 1471 阅读 · 1 评论 -
Java创建和销毁对象的几种方式
创建对象的几种方式构造器静态工厂方法通过Builder 不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器,得到一个builder对象,然后客户端在builder对象上调用类似于setter的方法,来设置每个可选参数,最后在客户端调用无参的build()方法来生成对象。下面是一个简单的示例://builder patternpublic class NutritionFact原创 2016-12-27 23:36:13 · 5005 阅读 · 0 评论 -
IDE工具的使用参考的一些blog
IDEA 创建Maven Web项目 IDEA中 @override报错的解决方法原创 2016-12-29 18:42:25 · 566 阅读 · 0 评论 -
toString()方法
1. 在类定义的方法中有一个很特殊的方法:toString() 方法,即当使用system.out.println()输出时,当传入的参数是一个对象,而方法需要一个string参数,此时该方法就会被调用。原创 2016-03-19 09:48:31 · 535 阅读 · 0 评论 -
Java的IO系统
Java的IO操作最近想用Java写一个爬虫,知乎了一下,很多人推荐如果业务逻辑不太复杂,都推荐使用国内大牛写的的一个框架webmagic,这个是java实现的,思路参照谷歌的Scrapy 。但是实现爬虫需要用到很多关于IO操作和多线程,发现这两项一直都是我java比较模糊的地方,这次就顺便学习一下,我看的是《java编程思想》。对于IO的存取,不仅存在与各种I/O源端和想与之通信的接收端原创 2016-05-20 15:03:17 · 4381 阅读 · 0 评论 -
java中文乱码问题----常见编码类型
在java里面的编码问题是一个非常常见的问题,最近在玩网络爬虫,在我写的一个最简单的爬虫示例里面,我发现我爬知乎首页和百度百科的源代码出现了乱码。知乎的首页爬出来的数据,中文能正常显示,而百度百科的首页爬出来的数据中文全部是乱码。这让我想起来总结一下java中编码 中文乱码的问题,不能每次出错了就百度,要搞清楚其中的原理,顺便做个总结。1. 问题的起源原创 2016-05-23 20:25:54 · 3229 阅读 · 0 评论 -
java中文乱码问题----java不同场景编码转换过程
这篇博客,主要是了解一下关于java在console控制台、Servlet类、数据库行运行时的编解码过程。 我们总是用一个java类文件和用户进行最直接的交互(输入、输出),这些交互内容包含的文字可能包含英文,但是更加需要我们关注的可能是包含中文。无论java类是与数据库交互还是与前端页面交互,他们的生命周期都是这样的:1. 程序员在操作系统上通过编辑器转载 2016-05-24 10:05:33 · 1350 阅读 · 0 评论