java基础-扫盲
文章平均质量分 82
以java基础概念为主
飞奔的大土豆
今天最好的表现是明天最低的要求
未来早已到来,只是还未普及
展开
-
我,一个4年老程序员,最近才开始用 Java8 新特性
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=447939805&auto=1&height=66"></iframe>转载 2021-08-29 21:59:47 · 915 阅读 · 0 评论 -
初识AsyncEventBus
背景:今天review代码,看到这个“AsyncEventBus”时,脑海里翻译了下“异步事件总线”,猜也就是往Bus总线那就是调用喽,自觉看到是import Google.Guava包的,这就不清晰了,好奇心驱动仔细多看了两眼发现是自己盲区的无疑了,那就找补一下吧概念:首先就google guava干啥用的,https://ifeve.com/google-guava/Google guava 和 Apache commons类似,都是对java语言和类库...原创 2021-08-25 00:40:05 · 682 阅读 · 0 评论 -
反射和动态代理
2. 反射 3. 注解## 反射:框架设计的灵魂 * 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码 * 反射:将类的各个组成部分封装为其他对象,这就是反射机制 * 好处: 1. 可以在程序运行过程中,操作这些对象。 2. 可以解耦,提高程序的可扩展性。 * 获取Class对象的方式: 1. Class.forName("全类名"):将字节码文件加载进内存,返回Cla...原创 2021-01-20 11:49:44 · 822 阅读 · 0 评论 -
最近学习了http通信协议
http官网说明http://www.faqs.org/rfcs/rfc2616.html1.1 Purpose The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. HTTP has been in use by the World-Wide Web global原创 2021-01-19 11:49:31 · 165 阅读 · 0 评论 -
最近学习了Http连接池
线程池:复用避免消耗资源, 连接池:每个任务的执行时间不要太长因为HTTP请求也好、数据库请求也好、hsf请求也好都是有超时时间的,。netty的nio rpc协议相比http协议更加简洁http的keep-alive是为了复用已有连接 HTTP/1.1 默认就是keep-alive的行为。当发送的请求是1.1版本时,客户端和服务器端默认都是keep-alive的行为。故而大部分的浏览器都...转载 2020-05-07 00:01:55 · 381 阅读 · 0 评论 -
Java日志框架:logback详解
为什么使用logback记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是我自己主导的项目,日志框架基本都换成了logback,总结一下,logback大约有以下的一些优点:内核重写、测试充分、初始化内存加载更小,这一切让logback性能和log4j相比有诸多倍的提升 logback非常自然地直接实现了slf4j,这个...转载 2020-05-06 15:13:39 · 376 阅读 · 0 评论 -
Java日志框架:slf4j作用及其实现原理
简单回顾门面模式slf4j是门面模式的典型应用,因此在讲slf4j前,我们先简单回顾一下门面模式,门面模式,其核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。用一张图来表示门面模式的结构为:门面模式的核心为Facade即门面对象,门面对象核心为几个点:知道所有子角色的功能和责任 将客户端发来的请求委派到子系统中,没有实际业务逻辑 不参与子系...转载 2020-05-06 14:30:17 · 183 阅读 · 0 评论 -
Java回调机制解读
调用:1:同步/2:异步(2.1异步非结果2.2 异步等结果->future Callable)/3:回调模块间调用在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种:(1)同步调用同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法继续往下走。这种调用方式适用于方法b()...转载 2020-05-03 23:43:50 · 110 阅读 · 0 评论 -
To Java程序员:切勿用普通for循环遍历LinkedList
LinkedList或者说是链表结构的缺点:顺序插入慢、遍历慢。优点:从结构中删除、插入元素非常方便 ArrayList这种底层以数组结构实现的而言它的优缺点是:插入、删除元素效率低,顺序添加、遍历非常快(hashkey的index存在内存种加快) LinkedList的底层是双向链表,刚开始也不是二分,只是确定他在前半段还是在后半段,以便决定是正向还是反向遍历,要进行二分,必须先对所有元素...转载 2020-05-03 18:13:06 · 406 阅读 · 0 评论 -
多线程上下文切换
对于单核CPU来说(对于多核CPU,此处就理解为一个核),CPU在一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另外一个线程,这个叫做线程上下文切换(对于进程也是类似)。前言本文来自方腾飞老师《Java并发编程的艺术》第一章。并发编程的目的是为了让程序运行得更快,但是并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行...转载 2020-05-03 16:54:10 · 207 阅读 · 0 评论 -
Java Socket
网络结构OSI七层网络模型:应用展示会话,网络传输数据链路,物理tcp是传输层协议,IP时网络层协议,http是应用层协议,socket是TCP/IP网络的API什么是SocketSocket的概念很简单,它是网络上运行的两个程序间双向通讯的一端,既可以接收请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递。所以简而言之,Socket就是进程通信的端点,Socket...转载 2020-05-01 17:26:55 · 661 阅读 · 0 评论 -
Unsafe与CAS(ABA)
小结: 1:unsafe是jvm用于操作底层系统的方法类,延申下:前些天学习hbase,把ons的堆积消息消费,刚开始没注意堆栈信息,用公网消费 tps能5k左右,一段时间后发现降到30~50(以为是自己线程存在同步导致下降,验证:注释所有可疑无果,后面放到华东2内网消费就回到1w上下),不过堆栈信息一致提示如下,最终确认环境公网限制的。TID: 150 STATE: WAITINGsun...转载 2020-04-27 20:39:26 · 289 阅读 · 0 评论 -
查漏补缺1
调度方式有两种:协同式线程调度与抢占式线程调度Reactor模式即反应器模式,是并发系统常用的多线程处理方式,用以节省系统的资源,提高系统的吞吐量。举一个餐厅吃饭的例子,可能会更好理解。前言Java的部分有基础、设计模式、IO、NIO、多线程,之后有时间还会把集合这部分补上去,这么多内容里面,难免有一些知识点遗漏,本文主要是讲解这些遗漏的知识点。这些知识点,不是特别大的难点,所以没...转载 2020-04-25 23:25:47 · 185 阅读 · 0 评论 -
自己写一个java.lang.reflect.Proxy代理的实现
自己也有个想法封装restful前言Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的。本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口、代理内容,生成代理。抛砖引玉吧,个人觉得自己写一些JDK里面的那些类挺好...转载 2020-04-25 20:41:45 · 213 阅读 · 0 评论 -
Java代码优化(长期更新)
前言2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,我的说法是这样的:就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了。代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对于提升代码的运行效率就很有用了。这个观点,在现在看来,是要进行代码优...转载 2020-04-25 16:26:41 · 185 阅读 · 0 评论 -
接口和抽象类
接口和抽象类的区别1、接口和抽象类的概念是不一样的。接口是对动作的抽象,表示的是这个对象能做什么,比如人可以吃东西、狗也可以吃东西,只要有相同的行为;抽象类是对根源的抽象,表示的是这个对象是什么,比如男人是人、女人也是人2、可以实现多个接口,只能继承一个抽象类3、接口中只能定义抽象方法,抽象类中可以有普通方法4、接口中只能有静态的不能被改变的数据成员,抽象类可以有普通的数据成员...转载 2020-04-25 14:43:06 · 2173 阅读 · 0 评论 -
Java语法糖4:内部类
内部类最后一个语法糖,讲讲内部类,内部类指的就是在一个类的内部再定义一个类。内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功,就会生成两个完全不同的.class文件了,分别是outer.class和outer$inner.class。所以内部类的名字完全可以和它的外部类名字相同。内部类分为四种:成员内部类、局部内部...转载 2020-04-25 10:08:33 · 154 阅读 · 0 评论 -
Java语法糖3:泛型
泛型初探在泛型(Generic type或Generics)出现之前,是这么写代码的:public static void main(String[] args){ List list = new ArrayList(); list.add("123"); list.add("456"); System.out.println((Strin...转载 2020-04-25 08:48:53 · 143 阅读 · 0 评论 -
Java语法糖2:自动装箱和自动拆箱
一开始想学学自动拆箱和自动装箱是被这个名字吸引到,听上去好像很高端的样子,其实认真看一下,自动拆箱、自动装箱就是很简单的内容。自动拆箱和自动装箱Java为每种基本数据类型都提供了对应的包装器类型。举个例子:public class TestMain{ public static void main(String[] args) { Inte...转载 2020-04-24 23:58:46 · 157 阅读 · 0 评论 -
Java语法糖1:可变长度参数以及foreach循环原理
小结:foreach循环原理 1:集合能被foreach是因为默认实现了Iterable接口; 2:数组能foreach 是java将其转换为对数组每一个元素的循环引用。Iterator是迭代器接口,实现此接口的实例可以对元素集合进行迭代遍历,而Iterable是为了只要实现该接口就可以使用foreach进行迭代 Iterable中封装了Iterator接口,只要实现了Iterable...转载 2020-04-24 23:38:02 · 318 阅读 · 0 评论 -
反射
基本反射功能的实现(反射相关的类一般都在java.lang.relfect包里):getName()获得类的完整名字getPackage()获取此类所属的包getSuperclass()获得此类的父类对应的Class对象getField(String name)获得类的指定属性getMethods()获得类的public类型的方法getMethod (String name,Clas...转载 2020-04-24 12:49:47 · 128 阅读 · 0 评论 -
说说WeakReference弱引用
SoftReference(软引用):GC的时候,内存没有溢出,则不会回收SoftReference关联的对象,溢出则回收WeakReference:一次执行完毕,栈中自动回收WeakReference弱引用概述http://www.cnblogs.com/xrq730/p/4836700.html,关于Java的四种引用状态具体请参看此文Java里一个对象obj被创建时,被...转载 2020-04-23 22:41:48 · 251 阅读 · 0 评论 -
JDBC学习2:为什么要写Class.forName("XXX")?
小结:1:使用Class.forName(String name),而不是 new Driver() 是因为帮助用户调用Driver里面的各种方法连接数据库,JDK都做好了,开发者就没必要自己写了。另外不用写的原因是,新版本JDBC使用了SPImysql-connector-java-***.jar\META-INF\services\java.sql.DriverClass.for...转载 2020-04-23 22:14:05 · 370 阅读 · 0 评论 -
JDBC学习1:详解JDBC使用
小结: 感觉第一次认识jdbc全称 ,而且只做三件事情,2:手动提交事务要回滚处理什么是JDBCJDBC(Java Database Connectivity),即Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供同一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,根据这种基准可以构建更高级的工具和接口,使数据库开发人员能...转载 2020-04-23 21:13:11 · 239 阅读 · 0 评论 -
Comparable和Comparator的区别
Comparable :内部继承(自定义Comparator仅继承自身)Comparator:外比较器(自定义Comparator继承可其他)前言初次碰到这个问题是之前有一次电话面试,问了一个小时的问题,其中有一个问题就问到Comparable和Comparator的区别,当时没答出来。之后是公司入职时候做的一套Java编程题,里面用JUnit跑用例的时候也用到了Compara...转载 2020-04-22 15:37:40 · 137 阅读 · 0 评论 -
讲讲HashCode的作用
(网友提供的一段,待改进:hashcode这个方法是用来鉴定2个对象是否相等的。那你会说,不是还有equals这个方法吗?不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或...转载 2020-04-16 22:27:27 · 242 阅读 · 0 评论 -
从为什么String=String谈到StringBuilder和StringBuffer
点:1:数据类型进行常量定义时:存储在(栈)常量池中,池中的数值都是唯一,定义的常量/变量 拥有的是池中的“引用”地址2:常量池中的数据 在编译时期已分配前言有这么一段代码:1 public class TestMain2 {3 public static void main(String[] args)4 {5 String ...转载 2020-04-14 23:11:01 · 151 阅读 · 0 评论 -
Java对象表示方式2:XStream实现对对象的XML化
前言上一篇文章讲到了使用Java原生的序列化的方式来表示一个对象。总结一下这种对象表示方式的优缺点:1、纯粹的Java环境下这种方式可以很好地工作,因为它是Java自带的,也不需要第三方的Jar包的支持2、多语言环境下,使用Java序列化方式进行存储后,很难用其他语言还原出结果3、占用的字节数比较大,而且序列化、反序列化效率也不高前面也提到过,对象表示有各种各样的方式,序列化只...转载 2020-04-12 18:11:31 · 104 阅读 · 0 评论 -
Java对象表示方式1:序列化、反序列化和transient关键字的作用
一、什么是序列化与反序列化?二、为什么要用序列化与反序列化?在为什么要用序列化与反序列化之前我们先了解一下对象序列化的两种用途:把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 在网络上传送对象的字节序列。举例: 我们可以想想如果没有序列化之前,又是怎样一种情景呢?Web 服务器中的 Session 会话对象,当有10万用户并发访问,就有可能出现10万个 Sessi...转载 2020-04-12 16:12:28 · 120 阅读 · 0 评论 -
static关键字作用总结
前言之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static。final和static一样,都是一个小问题可以看到一个人的基础是否扎实以及平时是否有钻研精神。静态变量和静态方法static关键字最基本的用法是:1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来2、被sta...转载 2020-04-08 12:47:17 · 183 阅读 · 0 评论 -
谈谈final的作用
前言一直想写写这个话题。代表公司也面试过一些求职者,每次面试我必问的两个问题之一就是“请你谈一谈对于final关键字的理解”。这是一个简单的小问题,但是不要小看它,通过对这个问题的回答以及一些简单的扩展就能看出一个求职者的基础是否扎实以及是否有钻研精神。OK,开始进入主题。final关键字的作用相信对于final的用法,大多数人都可以随口说出三句话:1、被final修饰的类不...转载 2020-04-06 21:57:57 · 187 阅读 · 0 评论 -
谈谈多态
概述我们都知道面向对象有四个基本特性:抽象、封装、继承、多态。这四个特性,概括起来可以这么理解,抽象、封装、继承是多态的基础,多态是抽象、封装、继承的表现。多态,是Java中非常重要的一个部分,所以今天来谈一下多态(Polymorphism)。什么是多态不同类的对象对同一消息作出不同的响应就叫做多态。就像上课铃响了,上体育课的学生跑到操场上站好,上语文课的学生在教室里坐好一样。...转载 2020-04-05 12:00:40 · 152 阅读 · 0 评论 -
解决ABA问题
前景描述:多个线程并发地去get遍历List,然后同时new类去set,会出现线程安全问题,然后傻乎乎取stackOverfloer/githup后台心态不好差差点想到把for遍历出的对象,放到queue,通过poll搞了,模拟Producer consumer的方式处理了,技术不行要多读书,见图实解:“那个list add ,list得换成一个线程安全的,add操作...原创 2020-03-15 21:17:14 · 380 阅读 · 0 评论 -
导出百万级-EasyExcel实践二
1:多线程高并发【java并发核心一】Semaphore 的使用思路2:高并发下,线程安全2s 10w数据量导出,待优化 int ndrcNum = SyuserSyroleMapper.countUserIsNDRC(dto.getSyuserId()); Query sql= getMatchFieldsByQuery(dto, bo,ndrcNum); ...原创 2020-01-05 16:46:07 · 1807 阅读 · 0 评论 -
信息: Initializing Spring FrameworkServlet 'spring'
今天搭建一个简单的Spring项目时:在启动项目时出现init项目特别慢卡在哪儿好久才会动,tomcat默认启动45s,必须手动设置100s才能启动完tomcat,最后发现我init dataSource时没有开启数据库服务(我的数据库在虚拟机上)信息: Initializing Spring FrameworkServlet 'spring'信息: No Spring WebApp原创 2017-05-08 19:57:21 · 7931 阅读 · 0 评论 -
jedisCluster
分类:redis/memcached(12) Spring(19) 最近在公司做了 jedisCluster整合spring 的配置, 分享如下 客户端采用最新的jedis 2.71.maven依赖:redis.clientsjedis2.8.02增加spring 配置Java代码转载 2017-05-07 22:59:30 · 653 阅读 · 0 评论 -
Spring HandlerInterceptor的使用
HandlerInterceptor翻译过来就是spring拦截器,它在某些功能应用上特别有用:1. 用户是否登陆以及用户权限管理 (见http://www.ideawu.net/ideablog/category4/article174.html)2. 根据用户的选择来决定是用HTML还是用Excel来作为View (该应用后面会讲解)3. blackboard buildi转载 2017-05-07 19:34:54 · 411 阅读 · 0 评论 -
fastjson和jackson的简单对比
中午吃完饭无聊,做了个fastjson和jackson的简单对比。fastjson是阿里做的国有开源Java工具包,jackson是spring mvc内置的json转换工具,孰强孰弱呢?结果吓我一跳!后面三张图,分别是1000条数据、5000条和1W条!注:年轻时写着玩儿的,代码逻辑混乱,有严重bug。大家图个乐好了。标签: fastjson Jackson转载 2017-05-01 22:14:39 · 3539 阅读 · 0 评论 -
Jocky代码混淆配置使用
http://www.cnblogs.com/fengbeihong/archive/2012/12/09/2810380.html转载 2017-03-17 14:00:55 · 2608 阅读 · 1 评论 -
今天下午导入maven项目后,编译前出现如下javax.servlet.http.HttpServletRequest
he project was not built since its build path is incomplete原创 2017-03-21 14:17:02 · 3596 阅读 · 0 评论