- 博客(57)
- 收藏
- 关注
原创 Java程序员元能力
程序员元能力编程能力——base编程能力程序员的硬实力,是一切的基础,也可以是某些人的核心竞争力沟通能力——key沟通能力是关键能力,决定程序员的前途命运要诀关注环境变化明晰他人需求立即行动,响应他人关切...
2021-07-16 15:24:01
109
原创 java缓存机制
Java缓存机制缓存是什么?凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache;缓存是空间换时间的方案缓存分类操作系统磁盘缓存-减少磁盘机械操作操作系统会把经常访问到的文件内容放入到内存当中,由文件系统来管理;特殊的应用程序会自己实现disk cache数据库缓存-减少文件系统I/O数据库至关重要,保存数据量十分大,查询操作十分频繁,有时还很复杂,导致数据库性能低下data buffer是数据库数据在内存中的容器,命中率决定数据库性能,越
2021-05-13 11:02:43
1785
原创 Java流与文件
流与文件流在JavaAPI中,可以从其中读入一个字节序列的对象称为输入流,而可以向其中写入一个字节序列的对象称做输出流这些字节序列的来源地和目的地可以是文件,而且通常都是文件,但是也可以是网络连接,甚至是内存块抽象类inputStream和OutputStream构成了有层次结构的输入/输出(I/O)类的基础面向字节的流不便于处理以Unicode形式存储的信息,所以从抽象类reader和writer中继承出来的专门用于处理Unicode字符的类构成了一个单独的层次结构这些拥有的读入和写出操作都
2021-03-31 00:09:36
280
原创 NIO
NIO新旧io新io,即NIO:NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。非阻塞 IO旧io: java.io 包中最重要的就是 5 个类和一个接口。5 个类指的是 File、OutputStream、InputStream、Writer、Reader;一个接口指的是 Serializable。都是同步阻塞的,因此,IO 通常也被称为阻塞 IO;面向字节流和字符流新旧io的区别IO是面向流的,NIO是面向缓冲区的。 Java I
2021-03-30 00:23:25
78
原创 jvm(十四)
jvm之高效并发Java内存模型与线程概述硬件的效率与一致性Java内存模型主内存与工作内存内存间交互操作Java内存模型还规定了在执行上述8种基本操作时必须满足如下规则:对于volatile型变量的特殊规则对于long和double型变量的特殊规则原子性、可见性与有序性先行发生原则Java与线程线程的实现Java线程调度状态转换...
2021-03-29 19:05:36
74
原创 jvm(十三)
java晚期(运行期)优化概述Hotspot虚拟机内的即时编译器解释器与编译器编译对象与触发条件目前主要热点探测分为两种:编译过程查看及分析即时编译结果编译优化技术公共子表达式消除数组边界检查消除方法内联逃逸分析Java与c++的编译器对比...
2021-03-29 18:03:39
64
原创 jvm(十一)
jvm类加载及执行子系统的案例与实战代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言法阵的一大步概述案例分析Tomcat:正统的类加载器架构一个功能健全的web服务器,要解决如下几个问题:OSGI:灵活的类加载器架构字节码生成技术与动态代理的实现Retrotranslator:跨越JDK版本JDK每次升级新增的功能大致可以分为以下4类:实战:自己动手实现远程执行功能目标我们希望最终的产品是这样的:思路实现
2021-03-29 16:05:29
70
原创 jvm(十)
jvm虚拟机字节码执行引擎执行引擎是Java虚拟机最核心的组成部分之一执行引擎在执行Java代码的时候可能会有解析执行和编译执行两种选择运行时栈帧结构栈帧时用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息局部变量表一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量容量以变量槽为最小单位...
2021-03-29 00:21:37
89
原创 jvm(九)
jvm虚拟机类加载机制代码编译结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步概述class文件中的信息进入到虚拟机后会发生什么变化?虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制Java中,类型加载、连接和初始化都是在程序运行期间完成的类加载的时机所有引用类的方式都不会触发初始化,称为被动引用类加载过程加载获取二进制流将字节流所代表的静
2021-03-29 00:01:26
147
1
原创 jvm(八)
jvm之虚拟机执行子系统类文件结构概述代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。无关性的基石各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码,是构成平台无关性的基石实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java语言中的各种变量、关键字和运算符号的语义最终都是由多条字节码命令组合而成的,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更加强大。class类文件的结构class文件是一组以8位字节位基
2021-03-28 21:18:26
86
1
原创 jvm(七)
jvm调优案例分析与实战案例分析高性能硬件上的程序部署策略通过64位JDK来使用大内存使用若干个32位虚拟机建立逻辑集群来利用硬件资源控制fullgc频率的关键是看应用中绝大多数对象能否符合“朝生夕灭”原则方案:建立5个32位的JDK逻辑集群,每个进程按2GB内存计算,占用了10GB内存,另外建立一个Apache服务作为前端均衡代理访问门户。集群间同步导致的内存溢出堆外内存导致的溢出错误除了Java堆和永久代之外,以下区域会占用较多内存:direct memory:可以通过-XX
2021-03-27 19:07:50
98
原创 jvm(六)
jvm虚拟机性能监控与故障处理工具概述给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。数据包括:运行日志、异常堆栈,堆转储快照。jdk的命令行工具jdk/bin目录下存在诸如“java.exe”等各种小巧的命令行工具这些工具都非常稳定而且功能强大,能在处理应用程序性能问题、定位故障时发挥很大作用这些命令行工具大多数是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库中实现的借助tools.jar类库里面的接口,我们可
2021-03-27 17:09:46
90
原创 Java反射
Java反射反射概述反射是框架设计的灵魂定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。实际上,我们创建的每一个类也都是对象,即类本身是java.lang.Class类的实例对象。这个实例对象称之为类对象,也就是Class对象。主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所
2021-03-18 20:59:26
66
原创 Java高阶知识
面向对象(OOP)概述OOP将数据放在第一位,然后考虑操作数据的算法。oop更适用于解决规模较大的问题。类是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例。对象中的数据称为实例域,操纵数据的过程称为方法。实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。程序仅通过对象的方法与对象数据进行交互。可以通过扩展一个类来建立另外一个新类。Java中所有类都源自一个超类——Object对象三特性:行为、状态、标识对象的状态并不能完全描述一个对象。每个对象都有一个唯一的身
2021-03-18 17:46:50
414
1
原创 Java灵犀指
java灵犀指随时随地,沧海拾遗静态变量没有使用final修饰,所以这个字段在初始化之前没有被赋值,需要在初始化阶段赋值,初始化阶段会调用类的类构造器函数()方法,这时候静态代码块会执行。...
2021-03-17 18:00:24
117
原创 Java类加载
Java类加载概述虚拟机将类的描述文件class文件加载到内存,并且进行安全校验、数据类型解析、内存分配以及初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程就是虚拟机的类加载机制。与解释执行语言不通,Java语言是编译型语言,类型的连接(即加载、连接、初始化过程)是在程序运行期进行的,会增加运行开销,但程序设计更灵活。Java文件从编码完成到最终执行,一般主要包括两个过程:编译、运行编译,即把我们写好的java文件,通过javac命令编译成字节码,也就是我们常说的.class文件。
2021-03-16 09:07:01
108
1
原创 Java求职必学知识图谱
Java求职必学知识图谱扎实的Java语言基础;深刻理解Java面向对象编程思想,熟练JavaEE技术JSP,javabean,serverlet,JDBC,IO,并发编程,并深刻理解其工作原理对jvm原理、结构、优化有一定经验熟悉主流的开发框架:Hibernate,Spring,SpringBoot,SpringMVC,mybatis了解SOA,微服务,熟悉restful,web services,springcloud了解分布式架构,对分布式架构中的相关通信、负载、熔断、限流等机制有所了解
2021-03-15 23:06:14
110
原创 Java化神宝典(三)
Java化神宝典(那里不会点哪里)客户端web网页编程HTML(内容)inline:span,a,img等block:h1,p,div等标签公共属性:style,id,class等HTML5:画布,SVG,拖拽,地理定位,表单,音频,视频,语义,Web存储,Web Worker,SSE,应用程序缓存CSS(显示)插入样式表:内联,内嵌,外部选择器:标签,类,ID等盒子模型:element等常用样式:尺寸,文本等单位:%,in,cm等CSS3:渐变,2D转换,3D转换,过渡,动
2021-03-14 12:32:59
65
原创 Java化神宝典(二)
Java化神宝典(哪里不会点哪里)类加载和反射类加载器:过程,PDM(父亲委托机制)Class对象: 类名.class,对象.getClass(),Class.forName(“类型的完全限定名”)反射:通过反射可以获取类的信息,动态创建对象(newInstance()),返回类对象forName(""),设定成员变量的值,调用方法(invoke())XML基础:可扩展标记语言,传输数据不是显示数据,可以自定义标签,具有自我描述性相关概念:XML验证,XSLT,XPath,XQuery,
2021-03-14 11:57:53
70
原创 Java化神宝典(一)
Java化神(不学则已,学则成神)Java程序基础概述特点面向对象平台可移植性分布式多线程安全性工作方式开发工具JDKjavacJavajavadocIDEIntellijEclipseNetBeans术语JDKJREJVMAPI源程序结构package管理类解决命名冲突importclass注释行注释 //块注释/…/文档注释/**…*/@author @param @return @thr
2021-03-14 00:40:52
75
1
原创 jvm(五)
jvm垃圾收集器与内存分配策略概述程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,这几个区域内存回收不需要过多考虑,方法结束或者线程结束时,内存自然就跟着回收了。Java堆和方法区内存动态分配与回收,垃圾收集器关注这部分内存。对象已死吗引用计数算法 引用计数法实现简单,判定效率高,大部分情况下是个好算法。 Java虚拟机里没有用此算法管理内存,因为它难以解决对象间循环引用的问题。可达性分析算法 主流的商用程序语言的主流实现中,都通过可达性分
2021-03-11 00:08:28
118
原创 osi七层模型
osi七层模型OSI下3层的主要任务是数据通信,上3层的任务是数据处理。而传输层是OSI模型的第4层。OSI是理想模型,一般网络系统只涉及其中几层,很少有系统能够具有所有的7层,并完全遵循它的规定。在7层模型中,每层都提供特殊的网络功能。下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通信为主;第4层作为上下两部分的桥梁,是整个网络体系结构中最关键的部分;而上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主。简言之,下4层主
2021-03-10 20:35:18
486
原创 排序算法之冒泡排序
排序算法冒泡排序简单排序算法。最坏时间复杂度:O(N^2);最优时间复杂度:O(N)算法稳定性:稳定的排序算法算法原理:对待排序列逐位进行两两比较并交换位序。算法步骤:确定需要对待排序列进行几次逐位比较;循环对待排序列进行逐位比较Java实现package com.example.demo.service;import java.util.Arrays;/** * @since 2021-0-0 */public class InsertSort { p
2021-03-10 16:24:52
59
原创 排序算法之插入排序
排序算法插入排序概述插入排序是简单直观。对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。实现上通常采用in-place排序,需要反复把已排序元素逐步向后挪位,为新元素插入提供空间。时间复杂度:O(N2),最好为O(n),最坏是O(n2)空间复杂度:O(1)对随机数据的排序,效率比冒泡和选择都高。对极端数据可能存在交换次数过的情况算法步骤从待排序列中拿出一个元素;从后往前扫描已排序列;若该元素小于被扫描元素,将该元素直接插入被扫描元素之前;若不小于被扫描元素,则插入被扫
2021-03-10 15:38:36
133
原创 排序算法之快速排序
排序算法快速排序快速排序是使用分支策略的一种改进型排序算法。快速排序其实是在冒泡排序的基础上做出的一个改进。基本思想:快速排序算法利用的是一趟快速排序,基本内容是选择一个数作为准基数,然后利用这个准基数将遗传数据分为两个部分,第一部分比这个准基数小,都放在准基数的左边,第二部分都比这个准基数大,放在准基数的右边.算法步骤:待排序列:6 1 2 7 9 3 4 5 10 81.任意选择一个待排序列的数字比如最左边的6作为基准数2.先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交
2021-03-09 20:48:51
155
原创 jvm(四)
jvmhotspot虚拟机对象的创建虚拟机遇到new时,先去常量池定位符号引用,看这个符号所代表的类是否被加载、解析和初始化。若无,必须先执行类加载过程。加载完成之后,即为新生对象分配内存。分配方式有指针碰撞与空闲列表,选择哪种由垃圾收集器是否带有压缩整理功能决定。执行new之后,会执行init方法,将对象初始化。对象的内存布局布局分三块区域:对象头、实例数据、对齐填充对象头包括两部分信息第一部分用于存储对象自身的运行时数据第二部分是类型指正,即对象指向它的类元数据的指针,虚拟机
2021-03-09 00:27:34
75
1
原创 jvm(三)
jvm自动内存管理机制java内存区域与内存溢出异常概念在虚拟机自动内存管理机制的帮助,不需为每个new操作去写delete/free代码,不易出现内存泄漏和溢出。但是,不易排查内存泄漏和内存溢出方面的问题。运行时数据区域Java虚拟机所管理的内存包括以下几个运行时数据区域程序计数器...
2021-03-07 16:07:25
77
原创 jvm(二)
jvm入门需知世界上没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程Java不仅仅是一门编程语言,还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统,移动终端,企业服务器,大型机等各种场合。作为一名Java程序员,编写程序是除了尽情发挥Java的各种优势外,还应该去了解和思考一下Java技术体系中这些技术特性是如何实现的。Java技术体系sun官方定义组成部分(统称为jdk)
2021-03-07 15:35:30
69
2
原创 jvm(一)
jvmjvm概念知识大纲自动内存管理机制java内存区域与内存溢出异常垃圾收集器与内存分配策略虚拟机性能监控与故障处理工具调优案例分析与实战虚拟机执行子系统类文件结构虚拟机类加载机制虚拟机字节码执行引擎类加载及执行子系统的案例与实战程序编译与代码优化早期(编译期)优化晚期(运行期)优化高效并发Java内存模型与线程线程安全与锁优化为什么要学习Java虚拟机技术为了写出最适合虚拟机运行和自优化的代码。Java虚拟机是中,高级开发人员(系统
2021-03-07 14:00:00
64
1
原创 java多线程(四)
Java多线程(四)线程数据传递、线程安全、线程通信线程数据传递在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。通过构造方法传递数据在调用start方法之前通过线程类的构造方法将数据传入线程。 package mythread; p
2021-03-06 17:56:30
112
5
原创 java多线程(三)
Java多线程(三)线程同步资源共享如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。线程同步概念1.多线程共享数据时,会发生线程不安全的情况(多个线程同时操作一个可共享的资源变量),多线程共享数据必须同步。2.同步是一种高开销的操作,因此应该尽量减少同步的内容。3.线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他非同步方法。4
2021-03-06 17:35:10
134
原创 Java多线程(二)
Java多线程创建多线程继承Thread类,实现多线程java里面提供了一个java.lang.Thread的程序类,一个类只要继承此类就表示这个类为线程的主体类,然后覆写Thread类中的run()方法(public void run()),此方法就是线程的主方法。eg:class MyThread extends Thread {//线程主体类 private String title; public MyThread(String title) {
2021-03-06 14:45:56
136
3
原创 java多线程(一)
Java多线程概念什么是多线程具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。软件多线程:即便处理器只能运行一个线程,操作系统也可以通过快速的在不同线程之间进行切换,由于时间间隔很小,来给用户造成一种多个线程同时运行的假象。多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。cpu核心数增加,计算机并行计算能力提升,若同一个时刻一个线程只能运行在一个cpu上,那么计算机的资源被浪费了为了提高系统的响应速度,如果系统只有一个线程可以执行,
2021-03-05 21:03:36
140
5
原创 springboot
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-documentation
2021-03-05 17:26:39
53
原创 springsecurity(三)
5.security filter@Servicepublic class MyFilterSecurityInterceptor extends AbstractSecurityInterceptor implements Filter { private static final Logger LOG = LoggerFactory.getLogger(MyFilterSecurityInterceptor.class); @Autowired private Filte
2021-03-05 15:02:15
282
原创 springsecurity(二)
demo1.pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>2.配置类package com.us.example.config;import com.us.example.service.CustomUserS
2021-03-05 15:01:30
90
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人