自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (3)
  • 收藏
  • 关注

原创 Netty异步和事件驱动

Netty简介 netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。

2020-08-28 09:16:41 147

原创 java 网络编程框架介绍

1、Apache MINA项目主页:http://mina.apache.org/为开发高性能和高可用性的网络应用程序提供了非常便利的框架;支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序2、Grizzly官网:http://xsocket.sourceforge.net/设计与一般的nio框架相比是比较不同的,主要不同点在于读和写都是采用blocking方式,并且使用临时selector ;线程模型高度可配置,不过据作者介绍在跑一个selector主线程

2020-08-24 09:51:54 156

原创 jdk版本之间差异

Java 52004 年 Sun 公司发布J2SE5(没错,Sun 公司又改名字了),版本代号 Tiger,这个版本的 Java 语言新功能如下: 1、泛型。 2、Metadata,元数据,描述数据的数据。 3、自动装箱和拆箱,也就是基本数据类型(如 int)和它的包装类型(如 Integer)自动帮你转换(其实背后是相关的方法帮你做了转换工作)。 4、枚举。 5、可变参数,一个函数可以传入数量不固定的参数值。 6、增强版的 for 循环。 .

2020-08-24 09:15:48 1270

原创 JVM-永久代与元空间

永久代PermGen是Permanent Generation的缩写,它是HotSpot对于JVM方法区的一种实现,也常被称为永久代。永久代是一片连续的堆空间,在JVM启动之前通过在命令行设置参数-XX:MaxPermSize来设定永久代最大可分配的内存空间,32位JVM的默认最大内存大小为64 MB,64位版本为82 MB。永久代的垃圾收集是和老年代(old generation)在一起的,因此无论谁满了,都会触发永久代和老年代的垃圾收集。移除永久代的工作从JDK1.7就开始了。JDK1.7.

2020-08-22 16:20:40 649

原创 JVM垃级回收-判断对象已死

引用计数器法当一个地方引用它时,就+1;当引用失效时,就-1;GC会回收那些计数为0的对象。优点:简单,快捷缺点:对于相互引用的对象会失效可达性分析算法通过一系列成为“GCRoots”的对象,向下搜索,搜索所走过的路线成为引用链。若是一个对象无法通过任何引用链和GCRoots相连接,则说明该对象不可达。当对象位于引用链上时,就不回收,当对象间虽然相连,但是却不在引用链上时就是回收这一部分。可以作为GC Roots的对象为:(1). 方法区常量、类静态静态属性所引用的类(.

2020-08-22 10:57:18 245

原创 JVM 内存益出

内存溢出是什么?当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出。内存溢出和内存泄漏有什么区别?内存泄漏是由于使用不当,把一部分内存“丢掉了”,导致这部分内存不可用。当在堆中创建了对象,后来没有使用这个对象了,又没有把整个对象的相关引用设为null。此时垃圾收集器会认为这个对象是需要的,就不会清理这部分内存。这就会导致这部分内存不可用。所以内存泄漏会导致可用的内存减少,进而会导致内存溢出。用到的jvm参数下面为了说明溢出的情景

2020-08-21 18:05:31 158

原创 堆与栈

堆与栈区别栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序)相关信息的。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。1 区别和联系:1.申请方式堆是由程序员自己申请并指明大小栈由系统自动分配,如声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间2.申请后系统的响应栈:只要栈的剩余空间

2020-08-21 16:35:39 119

原创 JVM内存区域

内存区域一方法区二堆新生代 eden survivor from survivor to老年代三程序计数器四虚拟机栈( JVM执行java方法)五本地方法栈(JVM执行本地方法)HotSpot直接内存(Direct Memory )...

2020-08-21 13:57:19 100

原创 java 虚拟机JVM

1、概述 1991 年Sun 公司的James Gosling 等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA 等的微处理器;1994 年将Oak 语言更名为Java;  java广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合,摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想2、java技术体系结构  按照功能来划分 包括以下几个组成部分:Java程序设计语言 各种硬件平台的java虚拟机 Java API类库...

2020-08-20 19:27:38 570

原创 Exchanger

1、概念 Exchanger(交换者)是一个用于线程间协作的工具类。 Exchanger用于进行线程的数据交换。 Exchanger提供一个同步点,在这个同步点,两个线程可以交换彼此的数据...

2020-08-19 16:46:55 139

原创 Semaphore

概念 Semaphore是java并发包里面的一个工具类,我们限制可以访问某些资源的线程数目就可以使用Semaphore了 Semaphore:可理解为允许线程执行信号的池子,池子中放入多少个信号就允许多少线程同时执行。 Semaphore的作用:限制线程并发的数量注意:的是 Semaphore 只是对资源并发访问的线程数进行监控,并不会保证线程安全Semaphore使用方法Semaphore(int permits)创建具有给定的许可数和非公平的公平设置的 Semap...

2020-08-19 16:32:38 98

原创 CyclicBarrier

1、概念CyclicBarrier可循环使用的屏障,让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时屏障才会开门 ,所有被屏障拦截的线程才会继续运行。CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。2.常用的方法:CyclicBarrier(int parties)创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,但它不会在启动 barrier 时执行预定义的操作。CyclicBarrie...

2020-08-19 14:33:35 116

原创 CountDownLatch

1、概念  CountDownLatch:具有计数器的功能,等待其他线程执行完毕,主线程在继续执行,用于监听某些初始化操作,并且线程进行阻塞,等初始化执行完毕后,通知主线程继续工作执行

2020-08-19 09:48:03 81

原创 java原子操作类

Java从JDK1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全地更新一个变量的方式。在Java并发比编程中,要想保证一些操作不被其他线程干扰,就需要保证原子性...

2020-08-18 10:59:49 166

原创 Fork/Join 框架

Fork/Join框架介绍 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结 果后得到大任务结果的框架。Fork/Join框架要完成两件事情:  1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割  2.执行任务并合并结果:分割的子任务分别放到双端队列里,然后几个启动线程分别从双端队列里获取任务执行。子任务执行 ...

2020-08-17 14:47:43 91

原创 Java 中的阻塞队列

一.什么是阻塞队列?阻塞队列是一个在队列基础上又支持了两个附加操作的队列。这两个附加的操作支持阻塞和插入和移除方法。支持阻塞的插入方法:队列满时,队列会阻塞插入元素的线程,直到队列不满。 支持阻塞的移除方法:队列空时,获取元素的线程会等待队列变为非空。二.阻塞队列的应用场景阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。简而言之,阻塞队列是生产者用来存放元素、消费者获取元素的容器。...

2020-08-17 10:12:11 76

原创 java面试高频知识点

集合类组合拳(尤其是HashMap)我觉得这个已经问烂了,应该熟到条件反射的回答,提醒一下一些冷门知识:Arrays.asList有什么特点、fail-fast与fail-safe、以及hashmap的一些参数(以及为什么)、hashmap是否可以存null值,concurrenthashmap是否可以存null值等等。并发编程组合拳例如:synchronized 的锁升级、对象头、字节码层面、openJDK层面的实现(3个队列),硬件层面的实现,volatile的底层原理,DCL(Doub

2020-08-17 09:23:01 423

原创 ConcurrentHashMap的实现原理与使用

ConcurrentHashMap是线程安全且高效的HashMap。为什么要使用ConcurrentHashMap?1线程不安全的HashMap(在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%)2效率低下的HashTable(HashTable)...

2020-08-14 11:05:55 319

原创 Condition接口

Condition介绍Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。Object上的监视器只有一个等待队列,但是Condition上可以有多个等待队列Condition是对象监视器的替代品,拓展了监视器的语义Condition类的方法方法 说明 public void await() 使当前线程等待,直到发出信号或中断信号。 public boolean await(.

2020-08-13 19:26:32 162

原创 LockSupport

LockSupport 当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具类来完成相应 工作。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功 能,而LockSupport也成为构建同步组件的基础工具。LockSupport 是用来创建锁和其他同步类的基本线程阻塞原语LockSupport方法介绍 方法 说明 void park() 阻塞当前线程,如果调用unpark方法或者当前线程被中...

2020-08-13 18:12:39 84

原创 Lock接口

Lock接口Lock接口有6个方法:// 获取锁 void lock() 是平常使用得最多的一个方法,就是用来获取锁。如果锁已被其他线程获取,则进行等待。在前面已经讲到,如果采用Lock,必须主动去释放锁,并且在发生异常时,不会自动释放锁// 如果当前线程未被中断,则获取锁,可以响应中断 void lockInterruptibly() 方法比较特殊,当通过这个方法去获取锁时,如果线程正在等待获取锁,则这个线程能够响应中断,即中断线程的等待状态。例如,当...

2020-08-13 15:06:22 106

原创 ThreadLocal 的使用

ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal变量ThreadLocal提供了线程的局部变量,每个线程都可以通过set()和get()来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离~。ThreadLocal可以让我们拥有当前线程的变量ThreadLocal是什么呢?每一个ThreadLocal能够放一个线程级

2020-08-13 11:15:23 188

原创 Thread.join()

管道输入/输出流形式:PipedReader、PipedWriter、PipedInputStream、PipedOutputStream。 PipedOutputStream、PipedInputStream主要是面向字节流;PipedReader、PipedWriter主要是面向字节流;

2020-08-12 16:00:43 169

原创 等待/通知机制

场景:一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行响应的操作,整个过程开始于一个线程,而最终执行又是另一个线程。前者是生产者,后者是消费者,这种模式隔离了“做什么”和“怎么做”,在功能层面上实现了解耦,体系结构上具备了良好的伸缩性,但是在java语言中如何实现类似的功能呢?实现:简单的办法是让消费者不断地循环检查是否符合预期,如下代码:while(value!=desire){Thread.sleep(1000);}上面的伪代码在条件不满足的时候就睡眠一段时间,这样做的目的是

2020-08-12 10:41:59 320

原创 过期的suspend,resume 和stop

方法介绍suspend():暂停任务 resume():恢复任务 stop():停止任务stop()当调用stop()方法时会发生两件事: 即刻停止run()方法中剩余的全部工作,包括在catch或finally语句中,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。 会立即释放该线程所持有的所有的锁,导致数据得不到同步的处理,出现数据不一致的问题。 suspend()和resu.

2020-08-11 19:26:42 323

原创 interrupt,interrupted,isInterrupted

interrupt()其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行。interrupted()作用是测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中断状态,第二次再调用时中断状态已经被清除,将返回一个false。isInterrupted ()作用是只测试此线程是否被中断 ,不清除中断状态。...

2020-08-11 17:35:27 224

原创 Vue 指令

Vue 指令常用指令1 指令v-html输出 HTML ,可以使用 v-html2 指令v-if 指令将根据表达式 XX 的值(true 或 false )来决定是否插入 p 元素3 指令 v-bind 被用来响应地更新 HTML 属性4 指令 v-on 它用于监听 DOM 事件5 指令 v-model 指令来实现双向数据绑定6 指令 v-pre 即可以跳过这个元素和它的子元素的编译过程...

2020-08-10 16:31:49 98

原创 Redis

1、什么是Redis?Redis 是完全开源免费的, 遵守 BSD 协议, 是一个高性能的 key-value 数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis 不仅仅支持简单的 key-value 类型的数据, 同时还提供 list, set, zset, hash 等数据结构的存储。Redis 支持数据的备份, 即 master-slave 模式的数据备份

2020-08-10 13:44:24 196

原创 MySQ面试大全

数据库基础知识为什么要使用数据库数据保存在内存优点: 存取速度快缺点: 数据不能永久保存数据保存在文件优点: 数据永久保存缺点:1)速度比内存操作慢,频繁的IO操作。2)查询数据不方便数据保存在数据库1)数据永久保存2)使用SQL语句,查询方便效率高。3)管理数据方便什么是SQL?结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。作用:用于存取数据、查询、更新和管理关系数据库系统。什么是MySQL?M

2020-08-07 11:08:43 583

原创 happens-before

happens-before是JMM最核心的概念happens-before字面翻译过来就是先行发生,A happens-before B 就是A先行发生于B?不准确!在Java内存模型中,happens-before 应该翻译成:前一个操作的结果可以被后续的操作获取。讲白点就是前面一个操作把变量a赋值为1,那后面一个操作肯定能知道a已经变成了1。...

2020-08-06 11:08:14 131

原创 final 域的内存

final域的内存语义对于final域,编译器和处理器要遵守两个重要的重排序规则:  1:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。  2:初次读一个包含final域的对象的引用,与随后初次都这个final域,这两个操作之间不能重排序。...

2020-08-06 10:19:36 97

原创 synchronized

synchronized 的实现原理与应用synchronized 称为 重要级锁synchronized 保证每个时刻只有一个线程执行同步代码,相当于是让线程顺序执行同步代码。java 中的每一个对象都可以作为锁 表现以下3种形式1 对于普通同步方法,锁是当前实例对象2对于静太同步方法,锁是当前类的Class 对象。3对于同步方法块,锁是Synchonized 括号里配置的对象...

2020-08-04 10:04:41 87

原创

锁1 公平锁/非公平锁公平锁:多个线程申请获取同一个锁,按照线程的申请顺序,排队获取锁。公平锁的好处是等待的线程不会被饿死,相应的缺陷 就是整体吞吐量很低、效率很低,使用new ReentrantLock(true)可以构造一个公平锁。非公平锁:多个线程申请获取同一个锁,获取锁的顺序不按照申请顺序,抢占式的获取。非公平锁的好处是整体效率很高,但是 可能会使有些线程一致在等待,造成饿死。使用Synchronized、new Reen...

2020-08-04 10:03:11 94

原创 sleep和wait的区别

sleep和wait的区别:1、sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。2、sleep不会释放锁,它也不需要占用锁。wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)。3、它们都可以被interrupted方法中断。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。sleep,wait调用后都会暂停当前线程并让出cpu的执行

2020-08-04 10:01:06 266

原创 Volatile

Volatile变量:一种同步的弱形式。它确保参一个变量的更新以可预见的方式告知其他的线程。1 Volatile 变量的操作不会加锁。也就不会引起执行线程的阻塞2 Volatile 变量地可见性的影响所产生的价值远远高于变量本身3 加锁可以保证可见性与原子性,volatile 变量只能可见性4volatile 关键字通过添加内存屏障(Memory Barriers)的方式来禁止特定类型的处理器重排序,即重排序时不能把后面的指令放到内存屏障之前满足下面所有的标准后,你才能使用Volatile...

2020-08-04 09:59:07 170

原创 Java并发 concurrent

concurrent包的实现阻塞队列 BlockingQueue :表示一个线程安放入和提取实例的队列用法:BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景一个线程往里边放,另外一个线程从里边取的一个 BlockingQueue方法:方法 抛异常 特定值 阻塞 超时 插入 add(o) offer(o) put(o) offer(o, timeout, timeunit) 移除 ..

2020-08-04 09:58:09 134

原创 Vue.js入门

Vue.js介绍 Vue.js是一套构建用户界面的渐进式框架。 Vue只关注视图层,采用自底向上增量开发的设计。 Vue的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件。

2020-08-03 16:34:17 85

原创 java bilibili 学习

3、Java基础学习零基础入门尚硅谷_Java零基础教程-java入门必备-初学者从入门到精通全套完整版(宋红康主讲) https://www.bilibili.com/video/av48144058 尚硅谷_康师傅2019新版—30天搞定Java核心技术 https://www.bilibili.com/video/BV18b411t7Nc 其实我一直比较喜欢尚硅谷的视频,零基础学习Java,上面两个完全够了新特性学习尚硅谷IDEA教程(idea经典之作) https://www

2020-08-03 14:39:14 649

原创 IDEA常用插件

1 translation见下图

2020-08-01 09:14:41 82

Dapper 学习DEMO

dapper是一款轻量级的ORM Dapper 被称为 ORM 之王。 dapper学习 DEMO

2023-08-25

Introduction.rar

GOF(23种设计模式代码实列,主要用于初学者)分为三大类: 创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 行为模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

2020-08-20

ThreadTest.rar

java并发,主要用于初学者学习,主要案列,Thread.join,ThreadLocal,Lock接口,LockSupport,Condition接口,ConcurrentHashMap的实现原理与使用 Fork/Join 框架,CountDownLatch,CyclicBarrier,Semaphore,Exchanger

2020-08-20

asp.net中导出Execl的方法

将DataGrid控件中的数据导出Execl 上述方法虽然实现了导出的功能,但同时把按钮、分页框等html中的所有输出信息导了进去。而我们一般要导出的是数据,DataGrid控件上的数据。 System.Web.UI.Control ctl=this.DataGrid1; //DataGrid1是你在窗体中拖放的控件 HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls"); HttpContext.Current.Response.Charset ="UTF-8"; HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default; HttpContext.Current.Response.ContentType ="application/ms-excel"; ctl.Page.EnableViewState =false; System.IO.StringWriter tw = new System.IO.StringWriter() ; System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw); ctl.RenderControl(hw); HttpContext.Current.Response.Write(tw.ToString()); HttpContext.Current.Response.End(); 如果你的DataGrid用了分页,它导出的是当前页的信息,也就是它导出的是DataGrid中显示的信息。而不是你select语句的全部信息。

2011-04-28

空空如也

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

TA关注的人

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