JAVA
文章平均质量分 89
码农杰森
公众号『码农杰森』 专注于原理与实践 将知识点安排的明明白白
展开
-
Java NIO 原理浅析与 Channel Selector Buffer 三大概念讲解
本文知识点:NIO 工作原理NIO 的三大概念 Channel Selector BufferNIO 相比于BIO的优点Java NIO 使用方法前言上一篇讲了Java BIO的使用和原理以及BIO模型带来的性能问题,BIO模型中每新增加一个连接就需要一个线程处理;可以使用线程池进行优化,但在10k、100k面前还是缚鸡之力;为了应对10k、100k的场景又演变出了另外一种网络I/O模型NIO。Java原生NIOJava 4 提供了NIO的API,NIO主要有几个基础的概念:Channe原创 2021-06-30 11:11:59 · 228 阅读 · 1 评论 -
Java BIO 原理浅析
本文知识点:BIO 工作原理BIO数据流类型Java Socket使用方法BIO 模型缺点与优化方法前言BIO在Java语言里是一种比较老的网络I/O模型,是阻塞的网络I/O模型,在监听、读取数据、写入数据时都会对调用线程进行阻塞等待内核态完成,读取数据的等待分为等待数据、 传输数据到用户空间。BIO工作原理图如下:BIO以数据流为核心,在读取与写入时都是通过流进行操作I/O流InputStream是Java socket中提供的默认读写网络流的接口类,其内部由SocketInpu原创 2021-06-28 16:41:55 · 196 阅读 · 0 评论 -
计算机基础 文件IO与网络IO 概述
本文知识点:计算机I/O类型有那些Linux6种文件I/O模型分别是那些Linux5种网络I/O模型分别是那些前言I/O输入/输出(Input/Output),计算机中常见的设备。从设备的角度出发有键盘、鼠标、显示器、打印机、网络。网络对于计算机而言可以充当输入也可以充当输出。从软件角度出发I/O是计算机中处理数据的通道,文件I/O系统、网络I/O等都是系统软件的一部分。文件I/O在Linux系统中使用VFS屏蔽系统底层的文件系统差异。VFS全名Virtual Filesystem,作用是原创 2021-06-23 16:11:40 · 519 阅读 · 0 评论 -
知识点: Java ReentrantReadWriteLock 读写锁共享锁与排他锁
Java ReentrantReadWriteLock读写锁实现原理前言ReentrantReadWriteLock实现原理ReentrantReadWriteLock公平锁与非公平锁总结本文知识:共享锁与排他锁理论ReentrantReadWriteLock实现读写锁原理前言先来说下共享锁与排他锁的概念,先在概念上有个了解:共享锁:锁在同一时刻可以被多个线程共享使用,一个线程对资源加了共享锁后其它线程对资源也只能加共享锁。共享锁有着很好的读性能。ReentrantReadWriteL原创 2021-06-16 09:49:11 · 331 阅读 · 0 评论 -
知识点: Java公平锁与非公平锁 原理讲解ReentrantLock 锁的饥饿效应及解决办法
公平锁与非公平锁理论前言AQS公平锁非公平锁ReentrantLock 使用ReentrantLock 解决饥饿效应本文知识:公平锁与非公平锁理论AQS的理论与原理讲解公平锁与非公平锁原理讲解ReentrantLock的使用非公平锁饥饿效应解决方法在上篇中分析了Java并发编程中悲观锁与乐观锁的实现算法,并分析了原子类中使用CAS算法实现乐观锁以及ABA、自旋等问题。延续上篇继续导论Java ReentrantLock锁,如果实现公平锁与非公平锁。前言公平锁:多个线程申请锁时是相对公原创 2021-06-14 14:09:41 · 2337 阅读 · 4 评论 -
知识点: JAVA 悲观锁与乐观锁原理分析 ABA与自旋效率问题分析及解决
悲观锁与乐观锁前言悲观锁与乐观锁Java原子类 ABA问题Java原子类 自旋效率问题Java原子类 片面性替换方案本文知识:悲观锁与乐观锁原理ABA问题原理与解决方案自旋锁原理与问题分析前言Java中提供了丰富的锁,每种锁因其特性不同,在适当的场景下展现出非常高的效率,本篇文章旨在通过源码分析、使用场景来讲解Java各种锁以及各种锁适用的场景。通过对锁的不同含义、适用场景做了如下归类:悲观锁与乐观锁悲观锁与乐观锁是一种广义上的锁,体现在看待锁的角度不相同。在Java与数据库中都有广原创 2021-06-11 11:28:35 · 1389 阅读 · 4 评论 -
Java ThreadLocal 有内存泄漏的风险怎么搞?分析下原理吧
ThreadLocal通过阅读本遍你将获取的知识ThreadLocalThreadLocal实现ThreadLocalMapThreadLocalMap内存泄漏通过阅读本遍你将获取的知识ThreadLocal 使用方法ThreadLocal 适合使用的场景ThreadLocal实现方法与原理ThreadLocalMap实现方法与原理Thread如何存储ThreadLocalMapThreadLocalMap内存泄漏原因与避坑方法ThreadLocal被解释为线程本地变量,生命周期与和原创 2021-06-09 13:47:40 · 239 阅读 · 0 评论 -
知识点:Java 并发编程 - 理解原子性
Java 并发编程 - 原子性原子性定义Java 8种原子操作synchronizedJDk操作的原子类线程安全是多线程编程中需要重要关注的领域,在并发编程时会使用锁机制来解决多线程之间同一共享变量操作的问题,多线程操作同一共享变量不加锁时会让变量的状态不可控,这样的情况下线程的操作是不安全的。而当多线程访问同一个类时,如果不用考虑这些线程在运行时环境下调度和交叉执行,并且不需要额外的同步与调用方法上的协调,这个类的行为状态仍然正确,那称这个类是线程安全的。像Servlet就是线程安全的,请求之间相.原创 2021-06-08 10:34:52 · 263 阅读 · 2 评论 -
知识点:Java sychronized 内部锁实现原理
sychronized 内部锁实现原理内部锁 synchronized可重入性synchronized锁实现synchronized锁优化通过阅读本遍你将获取的知识:并发编程中synchronized关键字的用法synchronized锁的内部实现及可重入锁的实现ObjectMonitor内部主要结构与逻辑锁有那些状态与锁升级逻辑JDK对synchronized做了那些优化及优化的原因[上篇](Java 并发编程 - 原子性.md) 中讲解了多线程原子性的问题,通过ActomicInteg原创 2021-06-03 15:54:54 · 169 阅读 · 0 评论 -
知识点: Java FutureTask 使用详解
FutureTask 使用详解概述类图创建第一个任务取消任务检索结果值总结概述FutureTask 可取消的异步任务,提供Future的基础实现,并实现了Runnable接口。FutureTask包含了取消与启动计算的方法,查询计算是否完成以及检索计算结果的方法。只有在计算完成才能检索到结果,调用get()方法时如果任务还没有完成将会阻塞调用线程至到任务完成。一旦计算完成就不能重新开始与取消计算,但可以调用runAndReset()重置状态后再重新计算。类图FutureTask实现了Runnabl原创 2021-06-02 14:13:09 · 4732 阅读 · 2 评论 -
Java 线程创建的三种方式
Java Thread 创建的三种方式概述亲娘Thread二娘Runnable三娘FutureTask概述Java为单进程多线程的模式,在处理并发时常常使用多个线程来处理,在Tomcat druid等中间件中都有线程的应用。线程是进程的执行单元,线程依靠进行执行,只能使用进程分配的资源;在Java中每个线程都有单独的程序计数器、栈空间,相对于进程开销较小,线程是cpu调试的最小单元。线程可分为主线程 子线程 后台线程,主线程由JVM启动,并调用main方法,子线程由用户开启,后台线程为了线程的一种。原创 2021-05-28 10:08:14 · 1234 阅读 · 0 评论 -
Java ClassLoader详解双亲委派的实现原理
详解双亲委派的实现原理概述JVM默认的3类类加载器加载器的优先级双亲委派模式(Parent delegate)ClassLoader 委派如何工作的打破规则重写loadClass自定义线程上下文类加载器热加载类加载器的基本原理概述ClassLoader Java类装载器是Java运行环境不可或缺的一个部件,负责动态加载Java类至JVM虚拟内存空间中。Java中的类通常是按需要进行加载,即在第一次使用时将该类加载至JVM虚拟内存空间。有了类加载器,Java加载类文件就和系统的文件系统进行了解耦,在运原创 2021-05-24 11:09:17 · 358 阅读 · 4 评论 -
使用Java 注解完成权限验证
深入使用Java 注解完成权限验证概述如何定义与使用注解元注解@Retention@Target@Inherited@Repeatable注解的属性注解的本质概述Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。注解在Java中也被定义为一种类型;使用关键字@interface进行定义,定义的格式与interface基本相同如何定义与使用注解定义一个MyAnn原创 2021-05-19 16:50:13 · 936 阅读 · 1 评论 -
Java 反射技术应用与详解
Java 反射技术应用什么是反射Class类反射获取类型方法反射获取类型成员变量什么是反射反射的概念是由 Smith 在 1982 年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。Java中的Reflection原创 2021-05-17 14:12:54 · 181 阅读 · 0 评论 -
深入Java异常 详细解析JVM异常原理
java异常字节码详细分析与原理解析概述C语言处理程序异常Java异常捕获与处理Throw 与Throws 关键字Java 检查异常 运行时异常Java异常捕获原理分析throws 与 catch的顺序总结概述异常是什么?异常:程序运行时不在预期范围内的事情都可以称作为异常;异常阻止程序按照期望正常运行。异常如果捕获与处理?捕获异常可以使用if对预期值进行判断后输出异常码,在C++ C# JAVA 等语言中可以使用try...catch语法进行捕获与处理C语言处理程序异常在C语言中捕获原创 2021-05-13 10:14:25 · 356 阅读 · 1 评论 -
Java String StringPool StringBuilder StringBuffer详解,面试不再难
Java String StringPool详解概览new String("abc")与String.valueOf("abc")的区别JVM字符串缓存String StringBuffer and StringBuilder概览String在java中并不是值类型,而是对象;和其它包装类型一样被设计成不可变对象;String类声明final类型,所以也不能被继承。在Java 8中,String内部使用字符数组存储数据。public final class String implements jav原创 2021-05-11 14:04:42 · 245 阅读 · 5 评论 -
Java 8种基本值类型
Java 8种基本值类型8种基本值类型隐式值类型转换值类型的包装类包装类的缓存池包装类都为不可变对象8种基本值类型byte/8char/16short/16int/32float/32long/64double/64boolean/~Java编程语言是静态数据类型,所以在声明一个变量或者变量里必须指定类型,然后才能使用它们。byte:byte数据类型是8位带符号的二进制补码整数,最小值-127,最大值127(含)char: char数据类型为单个16位unicode字符,最小取原创 2021-05-10 16:41:52 · 872 阅读 · 0 评论 -
Spring Tx 如何实现“@Transactional”注解
在上篇中讲解了Spring-Tx模块是如果实现编程式事务以及是事务是如果进行管理的;经验丰富的读者可能也会发现在工作中重复的写事务的模块代码会是多么无聊与机械的一件事;做为一名工程师需要有工匠精神;为自己的工具箱添砖加瓦,那今天我们就会事务这个工具箱加上一片瓦;让这片瓦发挥它的功效。使用注解代替模板代码在java中会经常使用到注解这一特性;那是不是可以使用注解来代替事务的模板代码,在标有注解的方法被调用之前创建并开启事务,调用结束时提交事务,调用方法异常时对事务进行回滚;另外将事务隔离级别、传播级别以及原创 2021-05-01 08:54:52 · 380 阅读 · 2 评论 -
Spring Tx 之“PlatformTransactionManager“的编程式事务分析
在平常的工作会这样写一个模板事务,使用PlatformTransactionManager.getTransaction创建并开启一个事务;在try{}catch{}finally{}块中处理事务的提交、异常回滚等。示例代码:@Servicepublic class demo{ @Resource() PlatformTransactionManager transactionManager; public int insert(Product product,Pr原创 2021-04-29 12:21:59 · 2055 阅读 · 0 评论 -
Spring 事务注解 “@Transactional” 失效的三种场景
场景一@Transactional注解标注方法修饰符为非public方法时,@Transactional注解将会不起作用。例如以下代码,定义一个错误的@Transactional标注实现,修饰一个默认访问符的方法:@Servicepublic class TestServiceImpl {@Resourceprivate TestMapper testMapper;@Transactionalvoid insertTest() { int re = testMapper.inser原创 2021-04-28 18:33:06 · 781 阅读 · 0 评论 -
知识点:Java HashMap 原理与源码分析(下)
本文可以让你学到:1.HashMap resize原理 重要知识点2.HashMap 特性总结回顾上篇中讲了HashMap的特点、常用方法、工作原理以及hash值是怎样计算的;上篇《知识点: Java HashMap 原理与源码分析(上)》数据结构HashMap索引使用数组结构进行管理(图中的table字段),数组的类型为Node<K,V>[];Node是interface;Node实际有两个类型,分别为链表与红黑树;No原创 2021-04-23 23:07:52 · 1957 阅读 · 15 评论 -
知识点:Java HashMap 原理与源码分析(上)
知识点:Java HashMap 原理与源码分析(上)从本文你可以学到什么什么是HashMap?它有那些特点有些那常用的方法HashMap的工作原理HashMap中的Hash是怎么实现的;为什么要这样的实现概述HashMap 实现了Map接口;使用键值对的数据结构组织数据。在官方文档中这样描述HashMap:在这段描述中说明了HashMap的特点:基于Map接口实现;HashMap允许Null值的存在;HashMap不保存存储的顺序性,不保证顺序随着时间的推移保持恒定;原创 2021-04-21 16:35:26 · 313 阅读 · 0 评论 -
JAVA No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433/xxxxxx 解决办法
我是初学者,不喜勿喷;第一次使用spring框架连接sqlserver 2008 R2时出现了No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433/xxxxxx,在网上找了很多的方法,(http://blog.csdn.net/cwx01perfect/article/details/7688702这个给我原创 2015-03-16 14:12:47 · 16935 阅读 · 2 评论