自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

游离在社会边缘

积土成山,积水成川

  • 博客(42)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java的finalize方法探究

一个类实现了finalize方法后,如果出现大量创建该类的实例对象时,很可能会引起内存问题,使用时要特别注意。

2022-09-07 13:11:38 442 2

原创 探索java中的DI实现原理

什么是DIDI是Dependency Injection的简称,翻译过来就是“依赖注入”。熟悉java开发的同学都会接触到这个概念,在spring、guice等框架中均是一个基本概念。依赖注入所作的事情就是,在程序运行时为类的变量赋予实例。DI解决了代码分层开发,层次之间的代码解耦问题。与DI相伴生的概念是IOC,他们是同一事物的不同方面的阐述。如何实现DI如果我们编写的代码中,没有为类的变量创建实例,那么就要想办法在程序运行时为变量赋值。我目前能想到的方法就是利用java的reflect机制,

2020-12-28 10:13:56 1806

原创 java的jar包冲突排查思路

jar包冲突的起因一般使用eclipse或IDEA等集成开发工具进行项目开发打包的话,很少会出现引入不同版本的同一款jar包,所以在一个项目中出现引入的jar包冲突的现象极少,也比较容易排查。但是,随着java系统的庞大,往往一套庞大的应用系统会由不同的服务部件组成,而这些服务部件常常会由jar包相互引入的现象,这就为jar包冲突埋下了隐患。当一个部件因要与其他部件进行交互,而产生需要引入其他部件的相关jar包时,如果要引入的部件的jar包很多,一个不好的习惯,就是一些开发就将这些jar一概均引入自

2020-11-09 17:08:13 1182

原创 记一次NoClassDefFoundError错误

什么是NoClassDefFoundError? 与ClassNotFoundException异常不同,虽然NoClassDefFoundError也可能是找不到目标类,但其也可能是再初始化加载目标类时出错了,这两种情况均会导致jvm抛出这个错误。这是一个运行时错误,而ClassNotFoundException是一个编译时异常。相对于ClassNotFoundException而言,NoClassDefFoundError更难被排查。什么时候发生?发生NoclassDefFou...

2020-10-29 12:45:17 1639 4

原创 scala基础语法学习之三

scala基础语法学习之二十六、枚举scala没有枚举类型。scala提供了一个叫做Enumeration的抽象类,可以通过继承该类实现类似于枚举功能。scala中枚举示例:object Color extends Enumeration{ case class Val(val name:String, val code:Int) extends super.Val val YELLOW = Val("yellow", 1) val RED = Val("red", 2)

2020-08-21 17:41:14 208

原创 scala基础语法学习之二

接着上一章十二、循环控制语句scala的控制语句是if-else,与java用法相同。scala的循环语句while、do-while与java用法相同。scala的for循环用法与java不同,相比之下scala的for循环语法更加灵活。for循环基本语法:1.for(x <- range){语句}其中x是一个val值,不可变。range是一个范围,可以是如1 to 2或者1 until ...

2020-07-27 21:35:47 347

原创 java反射机制调用可变长参数构造方法创建实例

一、知识基础java加载类进内存均是通过jvm的类加载器完成。java类在内存的唯一标志,其实是通过类加载器+类全名(包名+类名)。不同的类加载器加载同一个类是不会出现冲突的。java的反射机制,是jdk提供的一套api,通过使用类加载器将指定的类动态加载进内存的方法。二、目标使用java反射机制创建一个实例对象,该类的构造方法的参数列表是可变长度的。三、代码示例 try { AInterface ai = Class.forName("com.sun.test

2020-07-02 11:46:31 591

原创 安装protobuf

一、关于protobufprotobuf序列化通信协议二、下载https://github.com/protocolbuffers/protobuf/releases/tag/v2.5.0三、安装cygwincygwin是Windows上的类unix环境。protobuf的包下载下来需要进行编译,编译需要用到gcc、cmake等库文件...

2020-05-30 02:47:10 216

原创 【java算法实践】一

题目求整数数组的最大子序列和。子序列一定是连续的。实现方式一 public long fun1(Integer[] arr, int left, int right) { if(left == right) { return arr[left]; } int center = (left + right)/2; long maxLeftSum = fun1...

2020-04-28 17:54:21 140

原创 Hive用户自定义函数UDAF开发

释义UDAF是User Defined Aggregation Function的简称。UDAF用来进行聚合运算,其输入是多行数据,输出一个计算结果。如何开发UDAF有两种实现方式:继承UDAF;或继承AbstractGenericUDAFResolver。前一种方式是简单的方式,但其使用了java的反射机制,因此性能上比后一种方式要低效,因此生产上不建议使用第一种方式。计算的逻辑...

2019-07-21 16:36:49 987 2

原创 java对象序列化技术

一、简介序列化用于存储或传输对象的信息。java的API提供了序列换技术,使用简单,但往往空间占用大。Kryo是一个java对象的序列化框架。它的目标是序列化更快、序列化对象更小、简单易用的API。Kryo可以将对象持久化到文件、数据库、或则用于网络传输。Kryo可以进行自动深度和浅层复制/克隆,它是直接将一个对象复制到另一个对象,而不是将对象转成bytes再转成对象。protobuf...

2018-07-27 17:52:14 182

原创 java IO细解

java IO问题是面试时经常关心的问题。java IO的发展从传统的IO到NIO再到AIO。一、什么是I/OIO即是指输入源及输出目的地。IO流可能会是不同种类的源和目的地,例如可以是磁盘文件、其它程序、一些设备、或者是内存数组等等。流可支持多种数据,包括简单的字节、基本数据类型、字符、甚至是对象。一些流仅仅是用于传递数据,而一些流是使用有效的方式来操作或转换数据。但不管这些流的内部是如何工作的...

2018-04-11 15:50:44 165

原创 java IO速度比较

以写文件速度进行比较。分别比较传统IO流、缓冲流、和NIO的速度。均写80000k的数据。本次测试环境是jdk8一、传统IO long l1 = System.currentTimeMillis(); byte[] b = new byte[]{1,2,3,4,5,6,7,8}; FileOutputStream fos = null; try { fos = new FileOu...

2018-04-10 15:56:09 892

原创 puppet使用整理

一、puppet是什么 puppet是使用ruby开发的一款资源自动化配置管理工具。它使用一种简单易读的通用语言,来定义你想要你的应用或服务成为什么样子。 通过它,你可以共享、测试和强制改变你的数据。它的每一步操作对于你来说都是透明的,并且它会通知你做出决定及验证是否相符。 它能帮助管理员方便的进行升级软件包、管理配置文件、系统服务、cron任务、添加新的配置和修复错误等重复工作。二、puppet...

2018-03-20 14:12:24 910

原创 mysql知识整理

安装完mysql后如果只能在安装目录下启动,需要将安装路径放在path里。windows系统mysql的启动:1,在服务里启动;2,手动启动,cmd-->mysql -h IP地址 -u 用户 -p 密码;查看用户下有哪些数据库:select database();进入某个数据库:use 数据库名;查看该数据库下的表:show tables;连接 mysql -h IP地址 -u 用户 -p...

2018-03-20 14:11:22 249

原创 protobuf序列化通信协议

一、概念protobuf是Google开发的开源项目。protobuf是一种串行化的数据结构信息,类似xml。主要用于消息传输中消息格式规范,数据存储。与xml相比,protobuf更小、更快、更简单、更少歧义、方便生成消息存取类。二、protocol buffer消息优点1.性能好,效率高主要与xml消息格式对比。在时间开销上,xml序列化开销不大,但解析开销很大,降低了系统性能;在...

2018-03-16 08:31:18 941

原创 kafka应用整理

一、 介绍 kafka是一个高吞吐量分布式的消息系统,由linkedin开源。 特点: 1、分布式、高吞吐量、速度快; 2、同时支持离线和实时两种解决方案; 3、开源; 4、源码是用Scala写的,可以运行在JVM上; 术语: 1、kafka将消息以topic为单位进行归纳; 2、将向topic发布消息的程序称为producer; 3、将预定topic并消费消息的程序称为con...

2018-03-15 15:55:37 146

原创 flume使用整理

一、安装 1、下载安装包 http://apache.fayea.com/flume/1.6.0/ 2、上传解压 tar -xzvf apache-flume-1.6.0-bin.tar.gz 3、配置文件 1.mv flume-env.sh.template flume-env.sh   vi flume-env.sh 配置JAVA_HOME 2.mv flume-conf.prope...

2018-03-15 15:52:58 369

原创 ssl安全通信整理

一、工作原理:    1.握手协议   握手协议有四个阶段:   1.1 建立安全能力       客户端发起,向服务端发送"hello"消息;   服务端响应,返回"hello"消息;   客户端消息中包含:      客户端支持的ssl最高版本的版本号; 一个用于生成主秘密的随机数; 会话id; 客户端支持的密码套件列表; 客户端支持的压缩方式列表;   响应消...

2018-03-15 15:46:18 480

原创 openldap整理

一、简介 ldap既lightweight directory access protocol。openldap是从x.500目录访问协议发展而来。二、特点 1.树状结构 2.快速查询,存储慢 3.c/s模式,server缓存数据,client提供操作目录树的工具 4.数据内容可以以文本(ldif)形式展示。 5.跨平台的internet协议。三、概念 3.1 entry entry是ldap基本...

2018-03-15 15:40:06 249

原创 Kerberos原理整理

一、什么是kerberoskerberos是一种网络身份验证协议。它设计的目的是使用对称密钥加密技术为客户端/服务器应用提供可靠的身份验证。美国麻省理工学院提供了一种该协议的实现。kerberos已经在很多公司产品中应用。kerberos是美国麻省理工学院为了解决非安全的网络环境中安全问题的解决方案。kerberos使用可靠的密钥使服务器能够验证客户端的身份,在不安全的网络环境中进行连接。...

2018-03-15 15:37:56 1703

原创 jdk内置工具整理

一.jps 1.1 用途 用来显示所有具有访问权限的Java进程的具体状态。 1.2 用法 jps [options] [hostid] options: -q 只显示进程id -m 同时显示进程id、主类名或jar名、传递给main方法的参数 -l 同时显示进程id、主类的完整包路径或jar的完整路径 -V 同时显示进程id、主类名或jar名、通过标记文件传递给jvm的参数 -v 同时显示进程...

2018-03-15 15:35:28 230

原创 springmvc框架整理

1.spring MVC环境搭建 1.jar包引入 spring*.jar、commons-logging*.jar、commons-connections*.jar、mybatis*.jar、mybatis-spring*.jar 2.web.xml配置 1、spring控制器 <servlet>     <servlet-name>dispatcher&l...

2018-03-15 15:31:04 156

原创 一些有趣的数学问题java编程实现

一、斐波那契数列 //斐波那契数列    //该数列从第三个数字开始,每个数字都是前两个数字的和;    public static long[] fibonacci(long n1, long n2, int n)    {        long[] l = new long[n];        l[0] = n1;        l[1] = n2;        for(int i=2;...

2018-03-15 15:28:46 1421

原创 sprintboot构建微服务

spring boot是由Pivotal团队开发的一个开源项目;一个旨在简化spring应用的全新框架;实现快速应用开发;springboot+maven构建springboot应用1.pom配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in...

2018-03-15 15:23:38 248

原创 Python编程语言整理

一、简介 python是一款清晰的、强大的编程语言。 python有很多解释器版本: CPython是使用C编写的。它是最初和最广泛使用的版本,通常新的语言特征都是先从这个版本开始出现。 Jython是java实现的一个版本。它既可以作为java应用的脚本,也可以使用java类库来创建工程。它也可以用来测试java类库。 Python for .NET实际上是使用CPython的版本,但是可...

2018-03-15 15:17:17 443

原创 scala基本语法学习之一

scala与java有许多相似地方,scala是面向对象与面向过程编程的统一体,java在jdk8之前都是面向对象编程。因此scala具有面向对象编程的特点,即封装、继承和多态,又有面向过程的特点,使得scala语言更加灵活多变,掌握起来有一定的难度。scala编译器的作者也是java编译器的作者,因此scala能够运行在所有的jvm上,scala具有与java一样的跨平台特征。本文整理sca...

2018-03-07 15:08:21 1288

原创 linux命令行整理

java程序猿工作中必然涉及到操作linux服务器,不熟悉linux命令是令人无法接受的。本人将工作中使用的linux命令进行收集整理,以供后来参考。1.vi或vim操作linux文件最常用的命令。这两个命令都是linux文本编辑命令。使用vi filename 或vim filename打开文件,进入文本编辑页面,常用命令整理如下:移动光标:h、j、k、l,分别对应向左、向下、向上、向右移动,也...

2018-03-05 17:34:17 182

原创 java设计模式之装饰器模式

装饰器?故名思意,就是在不改变对象原有功能情况下增强该对象的功能。这里面有两点需要注意:装饰类与被装饰类必须继承同一抽象类或实现同一接口。即要保持装饰类与被装饰类的功能一致。装饰类在构建实例时必须要传递一个父类的子类实例参数。即必须要有被装饰的对象。结构示例接口类interface  Father{void options();}一个子类Child implements Father{void o...

2018-02-27 17:50:28 224

原创 java垃圾回收机制

java的内存资源管理是交给jvm来管理的,java的程序员不需要关系对象申请内存资源及资源的释放问题。jvm的GC过程解决的问题是:1、发现不再使用的对象。2、释放这些对象占用的内存资源。不同的jvm可能有不同的GC方法,我们以JDK自带的Hotspot虚拟机为基础,探索java的GC机制。为何需要GC?根据经验,java程序在运行时创建的绝大部分对象都是存活时间很短。那些不再使用的对象如果不从...

2018-02-24 15:47:15 122

原创 hadoop技术探索之三

本章节继续介绍HDFS的一些概念和功能。一、配额HDFS允许管理员为某个目录设置文件名字配额,即是指在文件的拓扑树中以该目录为根的所有文件数目总和上限。超过配额时是不能够在该目录里新建目录或上传文件了。最大的配额是Long.Max_Value。在统计一个目录的所有文件数目时,目录本身也包括在内,故如果设置名字配额为1的话,将会使该目录保持为空。管理命令:设置名字配额:hdfs dfsadmin...

2018-02-01 16:25:52 683

原创 hadoop技术探索之二

本章之后,将对hadoop生态系统各个服务组件进行整理介绍和分析应用。下面先对hadoop的基础hdfs文件系统进行介绍。一、HDFS简介hadoop的分布式文件系统,提供海量数据存储和访问。它与现有的分布式文件系统有很多相似地方,也有很多不同与其他分布式文件系统的有价值的地方。它能够提供高容错机制,能够运行在廉价计算机硬件上。它能为应用数据访问提供高吞吐量,非常适合拥有庞大数据集的应用。HDFS...

2018-02-01 16:23:35 899

原创 jersey框架应用实践

本章节在于记录研究某个项目时遇到的restful架构技术jersey框架,这里以自己写的一个简单例子作为切入jersey的参考。本次使用的架构是jersey+guice,jersey作为rest服务框架,guice作为di框架。使用内嵌jetty作为应用容器,舍弃web.xml配置。进入正题:一、maven依赖:以下所列的依赖并非最小集。    org.eclips

2018-01-27 15:59:26 9539 2

原创 hadoop技术探索之一

接触hadoop技术近两年,因hadoop技术栈庞大而复杂,故而想整理一些知识供日后使用。一、什么是hadoop?hadoop是apache开源的一款可靠的、可扩展的软件系统,提供分布式计算。用户不必了解hadoop底层基础,就可以利用hadoop实现分布式开发,从而充分利用计算机资源。hadoop软件库是一个框架,它允许使用简单的编程模型,在计算机集群上对大型数据集进行分布式处理。它

2018-01-19 11:50:52 1250

原创 Python项目部署方法整理

最近因工作需要,研究了一款Python项目。作为java程序猿,习惯于java项目一个包就可以在任何平台上运行,因此在研究该项目伊始,本着也能够将Python项目打包部署的期望,研究了下python项目部署方法。一般情况,安装Python模块都会用到setuptools模块。它提供了Python模块的构建、编译、打包、安装等功能。在联网环境时,调用模块的setup.py脚本执行安装时,会自动下

2018-01-15 15:34:34 17687 1

原创 superset手动安装实践-非pip安装

本文是本人在研究使用superset过程中整理的,由于本人服务器环境特殊,无法连接外网,故本人整理了superset手动安装过程,在此记录以供参考。

2017-12-22 08:58:00 3422 1

原创 Java基础之线程安全

java多线程内存模型,主内存+工作内存。线程是将主内存的变量拷贝到工作内存中,在工作内存中对变量进行改动,再写回到主内存中,这个过程包含lock、read、load、use、assign、store、write、unlock等几个过程。jvm规定的这8个线程操作都是原子性的操作,但全过程并不是原子性的。jvm对这些操作做了限制,比如一个线程获取共享变量的lock后,其它线程要获取该变量的lock

2017-12-09 10:46:05 128

原创 java基础之泛型的使用

泛型,也许有人会比较陌生,但是我们经常使用到它,泛型表示不确定类型,我们经常在使用java集合时使用到它。java集合类都是泛型类,例如List,list的类名后面带有,这个E就是泛型,它代指某个不确定的类型,它并不是类名的一部分。List与List实例对象,他们定义时,泛型虽然不同,但是class名称是一样的,都是List。泛型是编译时有效,即List对象,在编译时,该list中只能

2017-12-01 17:43:36 192

原创 java基础之方法的可变长参数使用

有时我们在定义一个方法时,方法参数设置可能会根据调用情况的不同,需要的参数个数也不同,这时候参数列表其实就需要可变长度的参数列表。可变参数其实相当于数组参数,但是与其不同的是,可变参数在方法调用时,是可以不传递任何值的。下面是可变参数方法的一个示例:public static void doSomthing(String... args){System.out.println(Th

2017-12-01 14:24:18 185

原创 java设计模式之单例模式

单例模式是java常见额简单设计模式。使用场景是当程序运行中同时会有多处调用同一类型对象,并对同一资源进行操作且资源需要共享时,可以使用该模式。1 懒汉模式,线程不安全public class Singleton {    private static Singleton instance;    private Singleton (){}   

2016-07-18 10:17:26 147

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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