
java基础
文章平均质量分 54
yann.bai
你的态度决定你的高度
时刻谨记,我们永远是前进路上的初学者
展开
-
java动态加载jar包,并运行其中的类和方法
动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行。第四:写个main函数测试下 TestMain (这里比较无聊,写了个从文件读的方式获取jar路劲,路径就是上面提到的jar所在的位置)第三:将TestAction所在的包导出成jar包的方式,eclipse中直接export即可,放到指定目录,此处放在。第二:改写下实体类,实现接口 TestAction。//第一种 配置成文件格式。转载 2023-02-19 18:10:35 · 606 阅读 · 0 评论 -
Jackson Infinite recursion solution
根据错误提示中的infinite recursion知道是无线递归错误导致了堆栈溢出,查找代码后发现,由于代码中订单实体类Order内包含了订单详情OrderDetail的对象集合List,而OrderDetail内也含有订单Order对象,因此订单和订单详情是一对多双向关联的关系,在Jackson序列化List属性时会无循环下去,导致stackoverflow。在对象的序列化上选择自己需要的属性就可,对于不需要的属性就可以通过加入注解的方式忽略。转载 2022-12-12 15:45:08 · 245 阅读 · 0 评论 -
java awt实现拖拉式文件路径获取
java awt 拖拉式文件路径获取原创 2022-08-18 00:27:33 · 425 阅读 · 0 评论 -
Protobuf 语言指南
以一个简单例子对pb进行展开讲解syntax = "proto3"; package rpc.rpcclient.rpccall;option java_package="com.ppp.mpj";option java_multiple_files = false; option java_outer_classname = "MpjBean"; // 建议使用谷歌protobuf规范 遵循PB语法检查 // 谷歌protobuf规范地址:https://develop原创 2022-02-13 19:45:04 · 961 阅读 · 0 评论 -
Malformed \uxxxx encoding while mvn install
只想说一句,XXXX一大抄,耽误事啊,本来很好解决的问题,愣是搞复杂了当maven引入时发生失败或者报错Malformed \uxxxx encoding时,下面有两种最直接的方式:(1)通过下面grep查找出对应的文件删除grep -rnw ~/.m2 -e '\u0000'(2)删除你的本地maven仓库,重新导入本人两种方法都实践过,均可,文件中出现编码问题暂未找到原因,方法来源自macos - java.lang.IllegalArgumentException: Mal..原创 2021-10-27 19:53:21 · 662 阅读 · 2 评论 -
java如何优雅的实现多线程交替打印?
前几天有人问我交替打印如何实现,在面试过程中出现的大部分都是两个线程交替打印1-100内的数字,那么有没有一个通用的模板,适用于多个线程以及打印任意范围的数呢,今天发一下我写的模板,大家有什么建议可以回复,我再进行修改。package com.java.alibaba.yimian;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.Condition;import java.ut原创 2020-12-12 22:15:06 · 940 阅读 · 2 评论 -
java.io.IOException: Cannot run program “python3“: CreateProcess error=2, 系统找不到指定的文件。
今天在用java调用python进行执行时发现了一个错误,也就是下面这个错误。java.io.IOException: Cannot run program "python3": CreateProcess error=2, 系统找不到指定的文件。程序是这样的 Process proc; String line = null; try { // 执行py文件 proc = Runtime.getRun原创 2020-12-01 10:42:53 · 14697 阅读 · 1 评论 -
并发写java hashmap时效率以及报错问题(非jdk1.7 1.8比较问题)
最近在做一个比赛的时候用到了hashmap,需要多个线程对其进行操作,当然,大家都知道他是一个线性无关的。测试时,每个线程大约读取10w的数据量对hashmap进行put操作,来测试比单线程效率高多少,但是出现了一个很奇怪的现象,程序在linux系统中一直无法正常结束,一直卡在那里,并且偶尔报下面截图中的错误。字面意思,就是在超过limit时,node转treenode时报错,现在暂时没有去深究这个原因,所以先做个比较mark一下,过几天探究一下。...原创 2020-11-08 21:22:16 · 200 阅读 · 0 评论 -
如何查看java源码
在eclipse上,有时想看现有工程用到的第三方jar的源码时,ctrl+鼠标查看时总是出现“source not found”,很痛苦。我们接下来很简单的就将这个问题。(1)首先,假如我们的项目是普通java项目,我们为了方便,可以将其先转为maven项目,转换的过程是这样的(环境为esclipse):当然,假如已经是maven环境了那就不用转了。(2)在eclipse上“Window”-->“Preferences”-->"Maven"上,勾选“Download Artifa原创 2020-05-18 15:24:12 · 2426 阅读 · 0 评论 -
Thread中的isInterrupted()与interrupted()
惯例,先看源码中是如何定义的:两个方法是在Thread.class中定义的,其中private native boolean isInterrupted(boolean ClearInterrupted); public boolean isInterrupted() { return isInterrupted(false); } public ...原创 2020-01-14 20:31:19 · 312 阅读 · 0 评论 -
java后台面试笔记(勿进,个人记录用)
https://www.jianshu.com/p/1acdfac2b4e4https://www.jianshu.com/p/d52fea0d6ba5https://www.codercc.com/categories/backend/原创 2020-01-14 14:56:52 · 238 阅读 · 0 评论 -
Eclipse安装svn插件三种方式
本人使用第一种方式安装成功,第二种安装的时候没有成功,第三种没有尝试,所以推荐第一种安装方式1.在线安装:(1).点击Help-->Install New Software...(2).在弹出的窗口中点击add按钮,输入Name(任意)和Location(插件的URL),点击OK地址分别是:http://subclipse.tigris.org/update...原创 2020-01-08 10:06:41 · 411 阅读 · 0 评论 -
ReentrantLock相关知识图
转载 2019-12-17 09:50:48 · 145 阅读 · 0 评论 -
一张图读懂非公平锁与公平锁
来自灵魂画手徐志毅 大佬在Java并发编程中,公平锁与非公平锁是很常见的概念,ReentrantLock、ReadWriteLock默认都是非公平模式,非公平锁的效率为何高于公平锁呢?究竟公平与非公平有何区别呢?首先先简单从名字上来理解,公平锁就是保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁,而非公平锁则无法提供这个保障。看到网上很多说法说非公平锁获取锁时各线程的的概率是随机的...转载 2019-12-13 18:25:49 · 143 阅读 · 0 评论 -
mysql出现:There is no 'root '@ '% ' registered 解决方法
从别的mysql数据库拷贝过来的函数,执行总是报There is no 'root '@ '% ' registered 问题,我的解决办法是:给root用户赋予更多的权限,Navicat 按F6,命令行执行:grantallprivilegeson*.*toroot@"%"identifiedby".";flushprivileges;可解决...转载 2019-12-11 16:36:48 · 217 阅读 · 0 评论 -
Java不可重入锁和可重入锁理解
基础知识Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException异常,所以这两个方法必须在同步块代码里面调用。wait():阻塞当前线程notify():唤起被wait()阻塞的线程不可重入锁所谓...转载 2019-12-11 10:37:43 · 143 阅读 · 0 评论 -
两面看: Java 中的 String 有没有长度限制
String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西容易被忽略的。就如本文我们要讨论的问题:Java中的String有没有长度限制?这个问题要分两个阶段看,分别是编译期和运行期。不同的时期限制不一样。01 编译期首先,我们先来合理的推断一下,当我们在代码中使用String s = "";的形...转载 2019-12-07 17:14:30 · 144 阅读 · 0 评论 -
Java中两种String创建方式(一)
jdk1.7之前是常量池是在方法区(永久代)中,之后则移到了堆中。在Java中,初始化String分为两种:1. String s1 = "11";2. String s2 = new String("11")区别:方法1中,先在内存中查找有没有"11"这个字符串对象存在,如果存在就把s1指向这个字符串对象;方法2中,不论内存中是否已经存在"11"这个字符串对象,都会新建一个对象。...原创 2019-12-07 16:55:16 · 1075 阅读 · 0 评论 -
JVM中内存分配策略及堆和栈的比较(转载)
转载过来但是还没有理解透彻,总感觉题文有些许不符,了解比较深的大佬可以指点一二,万分感谢。内存分配策略根据编译原理的观点,程序运行时的内存分配,有三种策略,分别为静态的、堆式的、栈式的。静态存储分配指的是在编译时就能确定每个数据目标在运行时的存储空间需求,因而在编译时就给它们分配了固定的内存空间。这种分配方式要求程序代码中不能有可变数据结构(例如可变数组)的存在,也不允许有嵌套或者递归的结...转载 2019-12-06 17:19:37 · 173 阅读 · 0 评论 -
JVM二次入门(static引发的二刷)
一、认识JVM1. 什么是JVM?JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运...转载 2019-12-06 16:33:56 · 131 阅读 · 0 评论 -
Java 中为什么static方法中不能使用this关键字
当使用static的变量或者方法的时候我经常不注意,会产生一个警告。The static field User.statid should be accessed in a static way为何产生这个警告,如何解除这个警告呢,根据警告的提示,我将警告部分改成了下面这样,问题就好了: public User(int userId,String name,int userNu...原创 2019-12-06 15:33:11 · 6518 阅读 · 4 评论 -
经典选读
备读列表,接下来的一段时间内要积累的一些知识。1. c++拷贝构造函数详解(72733) 2. Linux文件系统详解(58353) 3. 二维码的生成细节和原理(36584) 4. C语言二维数组作为函数的参数(35109) 5. Linux查看端口使用状态、关闭端口方法(32738) 6. 理解矩阵乘法(32524) 7. 如何恢复 Linux删除的文件(18596) 8. ...原创 2019-12-01 18:44:31 · 239 阅读 · 0 评论 -
java Object转byte与byte转Object
今天实现一下如何从Object去转为byte和如何从byte转为Object。首先,定义一个类student:package com.byteToObject;import java.io.Serializable;public class student implements Serializable{ private int sid; private String na...原创 2019-11-30 22:29:28 · 6616 阅读 · 0 评论 -
Linux中文件描述符和打开文件之间的关系
文件描述符:在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。Linux中的文件类型Linux系统中把一切都看做文件,包括普通文件-、目录文件d、字符设备文件c、块设备文件b、符号链接文件l。文件描述符是内核为了高效管理已被打开的文件所创建的索引(一个非负整数),用于指代已被打开的文件,Linux下所有的的I/O操作的系统调用都是...转载 2019-11-30 21:40:49 · 233 阅读 · 0 评论 -
java 自己动手实现一个分布式系统 之 Netty篇 数据序列化 跨语言RPC框架Thrift详解
一、 概念Apache的Thrift软件框架,是用来进行可伸缩的、跨语言的服务开发,它通过一个代码生成引擎来构建高效、无缝的服务,这些服务能够实现跨语言调度,目前支持的语言有: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delp...转载 2019-11-18 11:38:41 · 422 阅读 · 0 评论 -
java 自己动手实现一个分布式系统 之 Netty篇 数据序列化 开篇
目前数据交换格式可以分为以下几类1. 自解析型 序列化的数据包含完整的结构, 包含了field名称和value值. 比如xml/json/java serizable, 大百度的mcpack/compack, 都属于此类. 即调整不同属性的顺序对序列化/反序列化不影响.2. 半解析型 序列化的数据,丢弃了部分信息, 比如field名称, 但引入了index(常常是id+type的方式)...原创 2019-11-18 11:34:00 · 156 阅读 · 0 评论 -
java 自己动手实现一个分布式系统 之 Netty篇 序列化扩展 thrift插件安装
linux下thrift安装和rhbase安装:https://blog.youkuaiyun.com/qq_21153619/article/details/822507251、概述Thrift最初由Facebook开发的,后来提交给了Apache基金会将Thrift作为一个开源项目。当时facebook开发使用它是为了解决系统中各系统间大数据量的传输通信以及系统之间语言环境不同需要跨平台的特性...转载 2019-11-18 09:56:18 · 193 阅读 · 0 评论 -
java 自己动手实现一个分布式系统 之 Netty篇 BIO与NIO、AIO的区别
IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒...转载 2019-11-18 09:49:26 · 236 阅读 · 0 评论 -
深入理解Java反射+动态代理
反射机制的定义:是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为java的反射机制。反射的作用:1、动态地创建类的实例,将类绑定到现有的对象中,或从现有的对象中获取类型。2、应用程序需要在运行时从某个特定的程序集中载入一个特定的类详见:java反射机制原理...转载 2019-11-17 23:35:06 · 120 阅读 · 0 评论 -
java 自己动手实现一个分布式系统 之 Netty篇 option参数设置说明
Channel配置参数(1).通用参数CONNECT_TIMEOUT_MILLIS : Netty参数,连接超时毫秒数,默认值30000毫秒即30秒。MAX_MESSAGES_PER_READ Netty参数,一次Loop读取的最大消息数,对于ServerChannel或者NioByteChannel,默认值为16,其他Channel默认值为1。默认值这样设置,是因为:Serv...转载 2019-11-17 10:49:24 · 350 阅读 · 0 评论 -
java 自己动手实现一个分布式系统 之 Netty篇 handler()和childHandler()
handler()和childHandler()的主要区别是,handler()是发生在初始化的时候,childHandler()是发生在客户端连接之后。也就是说,如果需要在客户端连接前的请求进行handler处理,则需要配置handler(),如果是处理客户端连接之后的handler,则需要配置在childHandler()。下面是看看源码中是怎么实现的。ServerBootstrap#...转载 2019-11-17 10:45:34 · 6753 阅读 · 4 评论 -
java 自己动手实现一个分布式系统 之 Netty篇 入门
什么是netty?Netty是一个NIO网络编程框架,快速开发高性能、高可靠性的网络服务器/客户端程序。 极大地简化了TCP和UDP等网络编程,是一个异步事件驱动的网络编程框架。 重点是NIO、快速、高性能、异步、事件驱动。哪些中间件用到了netty?RPC(pigeon、dubbo、HSF)Hadoop、SparkMQ(swallow、RocketMQ)Zookeeper等最核心的...原创 2019-11-17 09:43:33 · 679 阅读 · 0 评论 -
java 自己动手实现一个分布式系统 之 Netty篇 杂谈 POSIX标准
POSIX标准介绍(不想看前面啰嗦的可以直接跳到最后看简单总结了)POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准。20世纪60年代是大型、复杂操作系统盛行的年代,比如IBM的OS/360和Honeywell的Multics系统。OS/3...转载 2019-11-13 16:09:39 · 351 阅读 · 0 评论 -
java 自己动手实现一个分布式系统 之 Netty篇 引用计数
netty为什么要使用引用计数---------Java中不是有gc线程帮我们回收对象吗?个人理解如下1、netty为了实现zero copy使用了Direct Buffer,该buffer从Native Memory分配出来,分配和回收效率要远低于在Java Heap上的对象,所以一般full gc来控制的,直接内存会自己检测情况而调用system.gc(),通过使用引用计数可以自己来控制该...原创 2019-11-13 15:58:25 · 207 阅读 · 0 评论 -
java 自己动手实现一个分布式系统(准备)
用到的主要技术栈:netty 网络传输框架spring-bootjava网络编程Java多线程和并发编程RPC(远程过程调用)方法的实现ProtoBuf 传输序列化框架下面来讲给一些这些技术的基础入门链接,因为这些技术的基础不是本文的重点1、Netty 网络传输框架学习链接Netty下载想要深入了解netty,可到github上面去找一些netty的项目学学做做我说...转载 2019-11-12 20:45:09 · 1146 阅读 · 0 评论 -
java-子类对象的实例化过程
子类对象的实例化过程:1.JVM先找指定的类字节码并加载进内存,并会先加载父类的字节码进内存;2.在堆内开辟内存空间,分配内存地址;3.在对象的内存空间中对对象的属性进行默认初始化;4.调用对应的构造方法初始化;5.在构造方法中第一行先调用父类的构造方法对父类进行初始化;(如果不显示指定父类构造方法,默认为super());6. 父类初始化完毕后,再对子类属性进行显式初始...转载 2019-11-12 00:10:06 · 242 阅读 · 0 评论 -
JVM内存
JAVA堆内存管理是影响性能主要因素之一。堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的。先看下JAVA堆内存是如何划分的,如图:JVM内存划分为堆内存和非堆内存,堆内存分为年轻代(Young Generation)、老年代(Old Generation),非堆内存就一个永久代(Permanent Generation)。 年轻代又...转载 2019-11-09 11:35:19 · 125 阅读 · 0 评论 -
java Arrays.sort()原理解析
趁热打铁,上面匿名内部类讲完了,这边抓紧把sort()方法解析一下。我们发现,jdk中的Arrays.sort()的实现是通过所谓的双轴快排的算法双轴快排:快速排序使用的是分治思想,将原问题分成若干个子问题进行递归解决。选择一个元素作为轴(pivot),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比轴元素小,另外一部分的所有数据都比轴元素大,然后再按此方法对这两...转载 2019-11-07 10:33:06 · 3115 阅读 · 0 评论 -
java 匿名内部类
匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口实例1:不使用匿名内部类来实现抽象方法abstractclassPerson {publicabstractvoideat();}classChildextendsPerson ...转载 2019-11-07 09:23:41 · 156 阅读 · 0 评论 -
java 基础路线图
今天开始,保持一天一个java知识点,下面是java基础的进阶图 第一阶段 技术名称 技术内容 J2SE (Java基础部分) Java开发前奏 计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置,程序的执行过程, 相关反编译工具介绍...转载 2019-11-05 22:02:43 · 803 阅读 · 1 评论