
java
文章平均质量分 80
曹洪双
这个作者很懒,什么都没留下…
展开
-
Java子父类的加载和执行顺序
看了网友的子父类静态变量、静态代码块、构造代码块、构造方法的执行代码分析现结合亮哥讲解的子父类加载执行流程,自己写了一个验证代码,望各位大神指点首先,加载执行流程:1、在栈内存空间中开辟一个空间给引用数据类型变量b用2、加载父类.class字节码文件 ——> 父类的静态内容进方法区的静态区 ——> 开辟静态成员变量空间,并显示初始化。执行静态代码块(静态成员变量与静态代码块的执行顺序与代码顺序有关)3、加载子类.class字节码文件 ——> 子类的静态内容进方法区的静态区...转载 2020-07-23 16:16:53 · 599 阅读 · 0 评论 -
Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议)
版权声明:本文为博主原创文章,未经博主允许不得转载。最近研究了一下流媒体技术,也试着用免费开源的Red5搭建了流服务器,实现了直播,视频播放,远程视频会议等功能,下面是近期实践的总结,一. 先介绍一下流媒体技术:所谓流媒体技术,是指将连续的影像和声音信息经过压缩处理后放在网站服务器上,让用户能够一边下载一边观看、收听(即所谓的“在线欣赏”),而不需要等整个压缩文转载 2017-10-18 13:14:30 · 1151 阅读 · 0 评论 -
Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
转载请注明出处:http://blog.youkuaiyun.com/anxpp/article/details/51512200,谢谢! 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解。 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端。 代码的所有说明,都直接作为注释,嵌入到代码中,看代码时就能更容易理解,代码中会用...转载 2018-03-06 11:02:19 · 10054 阅读 · 5 评论 -
阿里云直播鉴权和直播地址算法
参数描述要配置出正确的鉴权,需要明确以下几个参数:推流地址完整的推流地址,形如:rtmp://video-center.alivecdn.com/{AppName}/{StreamName}?vhost={yourdomain}鉴权类型阿里云CDN 兼容并支持A、B、C三种鉴权方式,具体见URL鉴权方式。这里选择的是A类型鉴权KEYprivatekey字段用户可以自行设置时间戳时间戳是指格林威治时...转载 2018-03-13 12:35:33 · 3015 阅读 · 0 评论 -
Disruptor深入解读
将系统性能优化到极致,永远是程序爱好者所努力的一个方向。在java并发领域,也有很多的实践与创新,小到乐观锁、CAS,大到netty线程模型、纤程Quasar、kilim等。Disruptor是一个轻量的高性能并发框架,以惊人的吞吐量而受到广泛的关注。Disruptor为提高程序的并发性能,提供了很多新的思路,比如:缓存行填充,消除伪共享;RingBuffer无锁队列设计;预分配缓存对象,使用缓存...转载 2018-07-10 15:43:11 · 605 阅读 · 0 评论 -
伪共享
2.2.9 伪共享2.2.9.1什么是伪共享计算机系统中为了解决主内存与CPU运行速度的差距,在CPU与主内存之间添加了一级或者多级高速缓冲存储器(Cache),这个Cache一般是集成到CPU内部的,所以也叫 CPU Cache,如下图是两级cache结构: image.pngCache内部是按行存储的,其中每一行称为一个cache行,cache行是Cache与主内存进行...转载 2018-08-03 13:57:59 · 454 阅读 · 0 评论 -
springboot 完整企业项目搭建实记
昨天搭建ssm框架时突然想到可以搭建springboot来完美解决配置复杂的问题,今天学习了一下springboot的搭建,在此记录一下搭建的过程和踩过的坑这里给自己定一个该框架搭建完成的目标,如下 框架要求功能: - 处理http/json 请求 - 日志记录 - 持久化 - 数据源,事务控制 - 定时任务 - 视图模版搭建环境: - 编译器:idea 2016.2.4 ...转载 2018-09-13 15:50:00 · 350 阅读 · 0 评论 -
搭建springCloud
一、spring cloud简介Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,...转载 2018-10-25 17:22:40 · 136 阅读 · 0 评论 -
Java8 新特性之流式数据处理
一. 流式处理简介在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现。比如我们希望对一个包含整数的集合中筛选出所有的偶数,并将其封装成为一个新的List返回,那么在java8之前,我们需要通过如下代码实现:List<Integer> evens = new ArrayList&...转载 2019-01-30 16:15:06 · 171 阅读 · 0 评论 -
Java8新特性——StreamAPI(一)
1. 流的基本概念1.1 什么是流?流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合。众所周知,集合操作非常麻烦,若要对集合进行筛选、投影,需要写大量的代码,而流是以声明的形式操作集合,它就像SQL语句,我们只需告诉流需要对集合进行什么操作,它就会自动进行操作,并将执行结果交给你,无需我们自己手写代码。因此,流的集合操作对我们来说是透明的,我们只需向...原创 2019-02-11 10:24:58 · 137 阅读 · 0 评论 -
多线程中的ThreadLocal 详解
要了解ThreadLocal,首先搞清楚ThreadLocal 是什么?是用来解决什么问题的?ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类中的 private static 字段,是对该字段初始值的一个拷贝,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联我们知道有时候一个对象的变量会被多个线程所访问,这时就会有...转载 2019-03-08 11:27:18 · 161 阅读 · 0 评论 -
Java实现动态代理的两种方式
一般而言,动态代理分为两种,一种是JDK反射机制提供的代理,另一种是CGLIB代理。在JDK代理,必须提供接口,而CGLIB则不需要提供接口,在Mybatis里两种动态代理技术都已经使用了,在Mybatis中通常在延迟加载的时候才会用到CGLIB动态代理。1.JDK动态代理:public interface Rent { public void rent();}publi...转载 2019-03-13 16:16:09 · 258 阅读 · 0 评论 -
tomcat性能优化
Tomcat在各位JavaWeb从业者常常就是默认的开发环境,但是Tomcat的默认配置作为生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈.幸好Tomcat还有很多的提升空间.下文介绍一下Tomcat优化,可以分为内存,线程,IO.一:Tomcat内存优化,启动时告诉JVM我要一块大内存(调优内存是最直接的方式)Windows 下的catalina.batLinux...转载 2019-03-26 16:02:39 · 160 阅读 · 0 评论 -
tomcat内部结构及请求原理(转)
Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。Tomcat的组织结构Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的是Catalina servlet容器,其他组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各种组件都是在Tom...转载 2019-03-26 17:03:47 · 354 阅读 · 0 评论 -
面试必问的CAS
概述CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原理。案例介绍CAS之前,我们先来看一个例子。上面这个例子在volatile关键字详解文中用过,我们知道,运行完这段代码之后,并不会获得期望的结果,而且会发现每次运行程序,输出的结果都不一...转载 2019-05-22 11:30:35 · 169 阅读 · 0 评论 -
Java泛型类型擦除以及类型擦除带来的问题
目录1.Java泛型的实现方法:类型擦除 1-2.通过两个例子证明Java类型的类型擦除 2.类型擦除后保留的原始类型 3.类型擦除引起的问题及解决方法 3-1.先检查,再编译以及编译的对象和引用传递问题 3-2.自动类型转换 3-3.类型擦除与多态的冲突和解决方法 3-4.泛型类型变量不能是基本数据类型 3-5.运行时类型查询 3-6.泛型在静态方法和静态类...转载 2019-09-28 17:17:36 · 313 阅读 · 0 评论 -
Eclipse下使用maven搭建多模块项目
暂时将项目分为如下几层:domain(域模型层)、dao(数据库访问层)、service(业务逻辑层)、web(表现层),有需要再另行添加(如common等);目录结构:一、app该层为父层,管理其它模块层。1.1 创建Maven Project1.2 选择maven-archetype-quickstart1.3转载 2017-09-21 11:40:31 · 839 阅读 · 0 评论 -
Eclipse Maven 编译错误 Dynamic Web Module 3.0 requires Java 1.6 or newer 解决方案
Eclipse Maven 开发一个 jee 项目时,编译时遇到以下错误:DescriptionResourcePathLocationTypeDynamic Web Module 3.0 requires Java 1.6 or newer. bdp line 1 Maven Java EE Configuration ProblemDescription R转载 2017-09-21 10:38:52 · 263 阅读 · 0 评论 -
解决Cannot change version of project facet Dynamic web module to 2.5
我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2.3的,而一般现在至少都是2.5,在Project Facets里面修改Dynamic web module为2.5的时候就会出现Cannot change version of project facet Dy转载 2017-09-21 10:26:06 · 223 阅读 · 0 评论 -
锁,同步,可重入锁,读写锁
1、synchronized把代码块声明为synchronized,有两个重要后果,通常是指该代码具有原子性(atomicity)和可见性(visibility)。1.1 原子性原子性意味着个时刻,只有一个线程能够执行一段代码,这段代码通过一个monitor object保护。从而防止多个线程在更新共享状态时相互冲突。1.2 可见性可见性则更为微妙,它要对付内存缓存和编译...转载 2017-07-29 15:18:32 · 444 阅读 · 0 评论 -
Disruptor
已经不记得最早接触到 Disruptor 是什么时候了,只记得发现它的时候它是以具有闪电般的速度被介绍的。于是在脑子里, Disruptor 和“闪电”一词关联了起来,然而却一直没有时间去探究一下。 最近正在进行一项对性能有很高要求的产品项目的研究,自然想起了闪电般的 Disruptor ,这必有它的用武之地,于是进行了一番探查,将成果和体会记录在案。一、什么是 Disr转载 2017-07-31 13:26:07 · 464 阅读 · 1 评论 -
Java并发_volatile实现可见性但不保证原子性
读后感介绍了volatile实现可见性的基本原理介绍了volatile不能实现原子性的示例,volatile复合操作不能实现原子性,读取值后在自增前改值可能被其它线程读取并修改,自增后刷新值可能会覆盖其它线程修改后的值介绍了实现原子性的三种方法及示例synchronized 修饰对象ReentrantLock 使用lock()、unlock()加锁解锁,比synchron转载 2017-07-23 19:55:19 · 307 阅读 · 0 评论 -
内存可见性和原子性:Synchronized和Volatile的比较
Java多线程之内存可见性和原子性:Synchronized和Volatile的比较 【尊重原创,转载请注明出处】http://blog.youkuaiyun.com/guyuealian/article/details/52525724 在说明Java多线程内存可见性之前,先来简单了解一下Java内存模型。 (1)Java所有变量都存储在主内存中 (转载 2017-07-23 20:03:14 · 204 阅读 · 0 评论 -
BIO与NIO、AIO的区别
IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者转载 2017-08-08 08:52:23 · 210 阅读 · 0 评论 -
JAVA线程间通信的几种方式
今天在群里面看到一个很有意思的面试题:“编写两个线程,一个线程打印1~25,另一个线程打印字母A~Z,打印顺序为12A34B56C……5152Z,要求使用线程间的通信。”这是一道非常好的面试题,非常能彰显被面者关于多线程的功力,一下子就勾起了我的兴趣。这里抛砖引玉,给出7种想到的解法。1. 第一种解法,包含多种小的不同实现方式,但一个共同点就是靠一个共享变量来做控制;转载 2017-08-01 16:23:23 · 287 阅读 · 1 评论 -
Java 并发--- 线程间协作的两种方式:wait、notify、notifyAll和Condition
多线程除了同步问题外,还需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起转载 2017-08-02 13:10:59 · 213 阅读 · 0 评论 -
Java并发之CountDownLatch、CyclicBarrier和Semaphore
Java并发之CountDownLatch、CyclicBarrier和SemaphoreCountDownLatch 是能使一组线程等另一组线程都跑完了再继续跑;CyclicBarrier 能够使一组线程在一个时间点上达到同步,可以是一起开始执行全部任务或者一部分任务。作者:编走编想来源:oschina|2014-03-14 10:34 移动端 收藏 分转载 2017-08-02 13:21:10 · 212 阅读 · 0 评论 -
java中queue的使用
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Q转载 2017-07-25 09:51:02 · 192 阅读 · 0 评论 -
CountDownLatch理解一:与join的区别
首先,我们来看一个应用场景1:假设一条流水线上有三个工作者:worker0,worker1,worker2。有一个任务的完成需要他们三者协作完成,worker2可以开始这个任务的前提是worker0和worker1完成了他们的工作,而worker0和worker1是可以并行他们各自的工作的。如果我们要编码模拟上面的场景的话,我们大概很容易就会想到可以用join来做。当在当前线程中调转载 2017-07-26 15:39:38 · 210 阅读 · 0 评论 -
JAVA NIO
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。再者,现在互联网的面试中上点level的都会涉及一下NIO或者AIO的问题(AIO下次再讲述,本篇主要讲述NIO),掌握好NIO也能帮助你获得一份较好的offer。 驱使博主写这篇文章的关键是网上关于NIO的文章并不是很转载 2017-08-07 09:56:47 · 223 阅读 · 0 评论 -
java中JVM的原理
一、Java虚拟机的生命周期: Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序,就会有三个运行中的Java虚拟机。 Java虚拟机总是开始于一个main()方法,这个方法必须是公有、返回void、直接受一个字符串数组。在程序执行时,你必须给Java虚拟机指明这个包换main转载 2017-08-26 17:45:59 · 191 阅读 · 0 评论 -
JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同转载 2017-08-26 17:54:20 · 208 阅读 · 0 评论 -
java 反射
Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。 那么什么是Java的反射呢? 大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个转载 2017-08-30 14:37:24 · 228 阅读 · 0 评论 -
Java开发中的23种设计模式详解
设计模式(Design Patterns) ——可复用面向对象软件的基础设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真转载 2017-06-22 17:02:51 · 800 阅读 · 0 评论