
java基础
文章平均质量分 94
P19777
这个作者很懒,什么都没留下…
展开
-
Base64加密解密C语言实现
void encodeBase64(char* str,int len,char** in){ char base64[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; //读取3个字节zxc,转换为二进制01111010 01111000 01100011 //转换为4个6位字节,011110 100111 100001 100011 //不足8位在前补0,变成00011110 00100原创 2020-11-02 10:07:29 · 3006 阅读 · 0 评论 -
System.arraycopy()方法为什么是native的
按照一般的数组复制来说,就是遍历数组进行复制,为什么会需要用到native方法,难道C语言有什么更快的数据赋值方式吗?确实是有的,那就是memcpy(void *destin, void *source, unsigned n),函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中这个可要比数组复制快的多...原创 2020-03-24 17:41:32 · 554 阅读 · 0 评论 -
在tomcat上实现远程执行功能 - 参考深入JVM虚拟机
1.有什么用?在服务器程序运行的过程中排查问题,需要执行某段程序来查询程序的参数等。这种临时的执行代码的需求,且不能影响应用的正常运行,不能对应用的代码有任何的侵入,利用该文章的内容你就能实现2.如何实现我觉得最大的问题是如何执行我们的临时代码,而且不能停止服务器。这种情况肯定是需要我们的应用存在某种机制才能在运行时去加载我们指定的代码进行执行,我们可以在应用开发阶段实现该机制,方便在需...原创 2020-01-01 11:13:45 · 321 阅读 · 0 评论 -
理解JVM中的synchronized优化 偏向锁、轻量级锁、重量级锁
为了换取性能,JVM在内置锁上做了非常多的优化,膨胀式的锁分配策略就是其一。这里只讲这几种锁的概念,并不讲解锁的细节和详细的膨胀过程。1.偏向锁在某些时候,对于某个锁而言,可能并不存在多个锁来对他进行竞争。也就是说,访问该锁的始终都是一个线程,那么这种情况下,就完全没有必要进行复杂的获取锁的操作。就比如说我们可能在方法中创建了一个StringBuffer类型的变量,我们都知道该对象是线程安全...原创 2019-12-29 21:22:10 · 618 阅读 · 0 评论 -
Java-桥方法
1.引入桥方法的来源是源自于Java的泛型,因为Java的泛型擦除而导致在多态的时候会出现问题而引入了桥方法2.类型擦除Java在语法中虽然存在泛型的概念,但是在虚拟机中却没有泛型的概念,虚拟机中所有的类型都是普通类。无论何时定义一个泛型类型,编译后类型会被都被自动转换成一个相应的原始类型。但是要注意,泛型擦除其实只是擦除的字节码中code属性部分的泛型,classMetadata上还是会...原创 2019-12-27 23:26:03 · 2228 阅读 · 0 评论 -
Java中的 List.toArray()方法的相关问题
1.为什么toArray()不能利用泛型?我们在使用List的时候,明明给List传递了一个泛型参数,为什么toArray还是给我们返回了一个object数组?首先我们要清楚的是,java中的数组也是类Object[] newArray = new Object[]{"AAA","BBB"};// 出现类型转换异常// String[]q=(String[])(newArray)...原创 2019-12-22 16:07:03 · 1006 阅读 · 0 评论 -
计算机基础-浮点数的表示
利用Java的大数展示浮点数之谜引用知乎:https://zhuanlan.zhihu.com/p/893201021.浮点数的存储格式浮点数的精度问题并不只是存在于某个语言之上,而是在整个计算机体系上来说都存在这样的问题现在几乎所有语言都支持 IEEE 754 的二进制浮点格式。在说明这个格式之前,先看看科学计数法,有一个这样的数:123.456,表示成科学计数法是:+ 1...原创 2019-12-21 22:06:52 · 1759 阅读 · 3 评论 -
真随机数,伪随机数,UUID SecureRandom
1. 什么是真随机数?真随机数有一个非常基本的特征就是不可预测性2.什么是伪随机数大部分程序和语言中的随机数,确实都只是伪随机。是由可确定的函数(常用线性同余),通过一个种子(常用时钟),产生的。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。在java中存在一个Random类,我们查看其源码就能发现,其就是使用的算法来实现的随机数,算...转载 2019-12-18 19:47:54 · 2898 阅读 · 0 评论 -
ResourceBundle类国际化加载属性文件,Tomcat控制台部分乱码
起因今天在跑tomcat源码的时候在控制台出现了乱码,但是又是部分乱码,部分中文正常显示,但是部分中文显示异常这就很奇怪了,首先可以肯定的是,日志输出的编码肯定是没有问题的,因为前面的“信息”都是显示正常的,那么问题出在哪里呢?我就到打印这条日志的类去看了一下。日志在这里打印的,看起来没有毛病,我们将sm.getString()获取出来的结果打印了一下,发现是乱码的,根源找到了,给日...原创 2019-12-05 12:28:40 · 606 阅读 · 0 评论 -
Socket编程之一个端口能建立多个TCP连接
唯一能够确定一个socket连接有4点服务器的IP服务器的Port客户端的IP客户端的Porttomcat最多能建立多少个连接?tomcat作为服务端程序,一直在监听80端口,之前一直以为tomcat每接收到一个新的连接,都会创建一个新的socket,然后这个socket又会占用一个端口。但是事实上并不是这样的,肯定是会创建新的socket的,但是这个新创建的socket并不会占用新...原创 2019-12-04 19:37:33 · 5736 阅读 · 0 评论 -
java安全管理器SecurityManager
SecurityManager是java提供的一种安全管理机制,可以用来控制我们每一个class的一些操作权限,在很多的地方都使用到了这个比如在我们的System.getProperties()方法中有以下代码public static String getProperty(String key) { checkKey(key); // 获取权限管理器 Secur...原创 2019-12-04 13:20:11 · 722 阅读 · 0 评论 -
JDBC驱动自动加载的原理和ServiceLoader类的使用
在使用JDBC的时候我们都见过这样一条代码Class.forName("com.mysql.cj.jdbc.Driver");很多人都告诉我们说这是用来加载数据库驱动的,是的没错,他确实是用来加载驱动的,为什他就能实现驱动的加载?在mysql驱动包下的Driver类中有下面这样的代码,这个代码是数据静态代码块,当类被初始化的时候会执行该代码块,Class.forName("")方式加...原创 2019-12-02 22:33:33 · 1273 阅读 · 1 评论 -
Java读枚举类源码
public enum EnumSingleton { /** * 实例 */ INSTANCE(new Object()); private Object obj; EnumSingleton(Object obj) { this.obj = obj; } public Object getObj() {...原创 2019-12-01 17:22:23 · 302 阅读 · 0 评论 -
史上最牛的单例
来源于书籍:Spring5核心原理与30个类手写实战使用静态内部类实现的单例模式,利用了JVM的运行机制,外部类初始化的时候并不会初始化静态的内部类,只有在使用到了内部类的时候才会去初始化他,然后就会使单例对象初始化。问题在于,反射能破坏这种单例模式,因为反射能调用其构造函数创建一个新的对象,那么怎么办?就需要在构造函数上进行处理了,就得到了书上这样的方式public class Stati...原创 2019-12-01 16:14:33 · 189 阅读 · 0 评论 -
JAVA中的基本类型全部存储在栈上的?final对基本类型使用的优化
有很多的博客都说Java中的基本类型存储在栈上,对象都存储在堆上,这其实是一个非常严重的错误,如果真的是这样,那对象上的基本类型岂不是方法结束之后该变量的值就没有了,事实证明并没有这样。public class T { int a = 10000000; public static void main(String[] args) { T t = new T()...原创 2019-12-01 15:33:13 · 212 阅读 · 0 评论 -
JAVA中的final域真的不可以被修改吗?
final在java中的语义就是常量的意思,这个我们大家都知道。但是这个常量其实按照C语言的思想来说的话其实是相当于一个指针指向一个地址,然后指针的值不能被改变,也就是是说这个指针变量一直指向这块内存空间,但是这这块内存空间的值是可以被改变的。我们今天就来尝试一下去改变一下这个内存空间的值final Integer num = 321;public static void ma...原创 2019-11-30 11:37:18 · 680 阅读 · 0 评论 -
保证fast-fail机制的modCount为什么没有用volatile修饰?
modCount作用在很多的集合类中。对于ArrayList,modCount定义于其父类AbstractList中,JDK提供的注释为:The number of times this list has been structurally modified即用于记录集合结构上变化的次数我们在使用迭代器遍历这个List的时候,迭代器内部存在一个方法final void c...原创 2019-11-29 13:01:06 · 395 阅读 · 0 评论 -
final、static和final static
1、final可以在编译(类加载)时初始化,也可以在运行时初始化。比如基本类型,就是在类加载时进行初始化,而包装类型就是在运行时进行初始化。final强调是常量,修饰对象、属性、方法,在对象内部只能进行一次初始化,且被final修饰的属性,每个实例对象的该属性都不是指向同一个对象。2、static意思是静态,因为在类加载时完成,所以一个类只能有一个值,在类的内部可修改多次,多个对象共享一个值。...原创 2019-11-25 16:29:01 · 203 阅读 · 0 评论 -
URI以及配合JAVA中的File的使用
URI的组成从上面我们可以看出来URI中的组成部分,其实也与URL高度相似,因为URL是URI的子集嘛。在配合Java中的File使用的时候需要注意,java中的File对URI的组成部分进行了严格的限制,如果满足就会出现异常,具体请看。 public File(URI uri) { // Check our many preconditions i...原创 2019-11-24 20:52:21 · 3208 阅读 · 0 评论 -
大小端模式
什么是大小端?大小端在计算机业界,Endian表示数据在存储器中的存放顺序。百度百科如下叙述之:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 也就是我们人类读数字的顺序,我们从左往右读,byte的摆放也就从高字节到底字,从左往右进行摆放。小端模式,是指数据的高字...原创 2019-11-18 14:15:19 · 664 阅读 · 0 评论 -
热部署实现
对于Java应用程序来说,热部署就是在服务器运行时重新部署项目热部署在java应用中可以说是非常常见的一个技术了,springboot内部就使用了热部署。注意,热部署与热加载是不同的技术,热部署一般用在生产环境,而热加载一般用在开发环境。热部署是对整个应用的整体替换,而热加载是对某个class进行替换。要想实现热部署,我们必须对java的classloader机制有一定的了解,当...原创 2019-11-12 10:38:26 · 463 阅读 · 0 评论 -
javac命令编译项目,java命令执行项目
我们平时大量的使用IDE工具,可能连这个基本的命令怎么用的都不知道了,今天就来使用这个命令编译一个java项目。1.首先有一个java项目上面的这个项目是我用eclipse创建的一个普通项目,在eclipse中,其编译java项目之后会将生成的class文件放置在bin目录中,然后lib目录是我们自己创建的,使用javac编译项目的时候需要手动的指定jar包的位置我们的项目源文件放...原创 2019-11-06 13:26:27 · 7619 阅读 · 0 评论 -
Java 枚举源码分析
引言枚举类型是 JDK 5 之后引进的一种非常重要的引用类型,可以用来定义一系列枚举常量。在没有引入 enum 关键字之前,要表示可枚举的变量,只能使用public static final的方式。 1234 public staic final int SPRING = 1;public staic final int SUMMER = ...转载 2019-08-28 19:27:54 · 646 阅读 · 0 评论 -
从java字节码角度来看待i++
public static void main(String[] args) { int a = 10; a = a++ * 2; System.out.println(a); }out:20其实这本不算一个难题,稍微有经验的人应该一眼就能得出结论,我们从字节码来分析,这个结果是如何产生的。分析一下:bipus...原创 2019-09-03 15:30:27 · 135 阅读 · 0 评论 -
java中的字符个数,增补字符
char:Thechardatatypeisasingle16-bitUnicodecharacter.Ithasaminimumvalueof'\u0000'(or0)andamaximumvalueof'\uffff'(or65,535inclusive).从java的文档中这句话我们可以看出,java中的字符内部是以UTF-1...原创 2019-09-05 22:21:49 · 842 阅读 · 0 评论 -
Spring BeanUtils源码分析
我们写java项目的时候经常会遇到DO、VO、DTO对象之间的属性拷贝,以前可能会使用get和set方法来进行赋值,但是这样缺点是非常明显的,代码又丑又长,Spring提供了BeanUtils来帮助我们简化这个过程,其基本原理就是通过Java的反射机制(内省机制),我们一起来分析,顺便学习一下。1.内省机制(Introspection和PropertyDescriptor类)因为其实...原创 2019-09-13 22:48:52 · 655 阅读 · 0 评论 -
理解Type类型
整理自:https://blog.youkuaiyun.com/qq_30770095/article/details/79016257Type是一个空接口,所有类型的公共接口(父接口)。其意义表示Java所有类型,这里所谓的类型是从Java整个语言角度来看的,比如原始类型(Class类型)、参数化类型(泛型)、类型变量及其泛型数组等,可以理解为Class是Java对现实对象的抽象,而Type是对Java...原创 2019-09-15 22:26:40 · 3487 阅读 · 0 评论 -
利用动态代理动态的为接口生成实现类
1.为什么会有这样的想法去生成接口的实现类在学习mybatis的过程中,其存在一种机制,接口式编程。利用接口对我们sql的查询进行约束我们只是写了接口,mybatis能给我们返回一个该接口的实例,这个实例是怎么来的?思考:由于我们没有写该接口的实现类,mybatis返回的对象肯定不是简单的动态代理但是我们打印其返回对象的class发现class com.sun.proxy.$...原创 2019-09-16 16:36:14 · 4074 阅读 · 0 评论 -
JAVA泛型的局限性
首先我们需要清楚的一点是,jvm虚拟机中是不存在泛型的,只存在普通的方法和类,这是java泛型局限性的根本问题所在泛型擦除正确理解泛型概念的首要前提是理解类型擦除(type erasure)。 Java 中的泛型基本上都是在编译器这个层次来实现的。在生成的 Java 字节代码中的泛型信息:源码泛型所在位置的类型信息全部被删除了 在字节码的类, 字段, 方法的Signature属性...原创 2019-09-24 23:02:46 · 488 阅读 · 0 评论 -
深入理解Java:内省(Introspector)
一些概念: 内省(Introspector)是Java 语言对 JavaBean 类属性、事件的一种缺省处理方法。 JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”。方法比较少。这些信...转载 2019-08-28 17:24:49 · 181 阅读 · 0 评论