自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 数据结构

图邻接矩阵定义用两个数组来表示图:一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中边(无向图)或弧(有向图)的信息优点容易获得每个顶点的度,特别是对于有向图,获得顶点i的度,即arc[i]的值,入度也只需遍历第i列,即arc【】【i】缺点对于边数顶点相对较少的图,浪费了极大的存储空间邻接表定义对于顶点数组,每个数据元素需要存储指向第一个邻接点的指针每个顶点Vi的所有构成一个线性表,并用单链表存储,无向图成为顶点Vi的边表,有向图成为顶点Vi为弧

2020-06-28 16:18:08 215

原创 设计模式

各个设计模式的关键点单例模式: 某个类只能有一个实例,提供一个全局的访问点。简单工厂: 一个工厂类根据传入的参量决定创建出那一种产品类的实例。工厂方法: 定义一个创建对象的接口,让子类决定实例化那个类。抽象工厂: 创建相关或依赖对象的家族,而无需明确指定具体类。建造者模式:封装一个复杂对象的构建过程,并可以按步骤构造。原型模式: 通过复制现有的实例来创建新的实例。适配器模式: 将一个类的方法接口转换成客户希望的另外一个接口。组合模式: 将对象组合

2020-06-23 22:57:37 277

原创 多线程和并发

进程和线程的区别​ 进程和线程相似,但线程是一个比进程更小的执行单位,一个进程在其执行的过程中可以产生很多线程,与进程不同的是同类的多个线程共享一个内存单元和一组系统资源。所以系统在产生一个线程,或者是在各个线程之间切换工作,负担要比进程小的很多,因此线程称为轻量级进程。另外,也是因为共享资源,所以线程中执行时一般都要进行同步和互斥。总的来说,进程和线程的主要差别在于它们是不同的操作系统资源管理方式。​ 进程是系统资源分配的最小单位,线程是CPU调度的最小单位。所有与进程相关的资源,都被

2020-06-23 22:55:33 305

原创 StringBuffer、StringBuilder

String被声明为final类,内部变量亦被final修饰immutable(不可变)类当需要声明多个相同的字符串的时候,只会声明一个StringBuffer、StringBuilder实现原理都是基于可修改的char数组,默认大小是16都继承自AbstractStringBuilderStringBuffer线程安全(直接用的synchronized 关键字),StringBuilder非线程安全...

2020-06-23 22:52:19 114

原创 Spring IOC

广义理解控制反转IOC也可以叫依赖注入DI,因为依赖查找DL现在很少用,有侵入,IOC利用Java反射机制,AOP利用代理模式,IOC概念看似很抽象,但是很容易理解。说简单点就是将对象交给容器管理,你只需要在spring配置文件中配置对应的bean以及配置相应的属性,让spring容器来生成类的实例对象以及管理对象。在sping容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类IOC带来的好处

2020-06-23 22:51:16 182

原创 Spring

Spring事务的隔离级别TransactionDefinition接口中定义了五个表示隔离级别的常量TransactionDefinition.ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,mysql默认采用REPEATABLE_READ隔离级别,Oracle默认采用READ_COMMITED隔离级别TransactionDefinition.ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读,幻读和不可重

2020-06-23 22:49:09 141

原创 Servlet 生命周期

生命周期初始化调用init()方法来进行初始化​ init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用​ Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。处理请求调用service()方法来处理客户端请求​ 执行实际任务的主要方法,Servlet容器(即web服务器)调用service()方法来处理来自客户端的请求,并把格式化的响应回写给

2020-06-23 22:46:49 107

原创 Redis

Redis和Memcache的区别redis支持更丰富的数据类型不仅支持简单的K/V类型,同时还提供list,set,zset,hash等数据类型,而memcache只支持string类型redis支持数据的持久化,可以将内存的数据保存在磁盘中,重启的时候再次加载使用,而Memecache把数据全部存在内存中集群模式memcached没有原生的集群模式,需要依靠客户端来实现向集群中分片写入数据,redis原生支持cluster模式memcached是多线程,非阻塞io复用网络模型

2020-06-23 22:46:05 504

原创 Nginx

Nginx五个优点高并发,高性能可扩展性好【模块化设计,其他三方插件生态圈丰富】高可靠性【可以在服务器端持续不断的运行数年】热部署【这个功能对于Nginx来说特别重要,热部署指可以通过不停止Nginx服务的情况下升级Nginx】BSD许可证【意味着我们可以将源码下载下来进行修改然后使用自己的版本】四个主要组成部门Nginx二进制可执行文件:由各模块源码编译出一个文件Nginx.conf配置文件:控制Nginx行为acess.log访问日志: 记录每一条HTTP请求信息error.

2020-06-23 22:42:24 203

原创 Linux下的问题

Linux下cpu过高的问题第一种1. 使用top命令定位异常进程。使用top命令定位异常进程。可以看见12836的CPU和内存占用率都非常高此时可以再执行ps -ef | grep java,查看所有的java进程,在结果中找到进程号为12836的进程,即可查看是哪个应用占用的该进程。2. 使用top -H -p 进程号查看异常线程3. 使用printf “%x\n” 线程号将异常线程号转化为16进制或者是echo ‘obase=16;12875’ | bcbc是linux的计算器命

2020-06-23 22:41:40 607

原创 JVM

JVM的组成​ jvm主要由类加载器 Class Loader,执行引擎 Exexution Engine,运行数据区 Runtime data area和 本地接口 Native Interface 组成类加载器加载类文件到内存,Class Loader只管加载,只要符合文件结构就加载,至于能不能运行,是由Execution Engine负责。执行引擎也叫作解释器,负责解释命令,提交操作系统执行然后去执行@ Native Interface: 融合不同开发语言的原生库为Java所用

2020-06-23 22:40:16 287

原创 JVM GC

垃圾回收机制判断对象是否是垃圾的算法引用计数算法通过判断对象的引用数量来决定对象是否可以被回收每个对象实例都有一个引用计数器,被引用 + 1,完成引用 - 1引用计数为 0 的判断为垃圾优点 : 执行效率高,程序执行受影响较小缺点: 无法检测出循环引用的情况,导致内存泄漏可达性分析算法(主流)通过判断对象的引用链是否可达来判断对象是否可以被回收从GC Root开始扫描,可达的标记为可达,不可达的就被判定为垃圾对象可以作为GC Root的对象​ 虚拟机栈中引用的对象(

2020-06-23 22:37:46 193

原创 java EE的一些问题

final关键字的一些总结对于引用类型的变量,在对其初始化后便不能再让他指向另一个对象修饰类时,表明这个类不能被继承,final类中的所有成员方法都会被隐式的指定为final方法早期的java版本中,将final方法转为内嵌调用,如果方法过于庞大,则看不到任何性能提升。类中的所有private方法都隐式的指定为final反射java类的执行需要经历以下过程:编译:.java文件编译后生成.class字节码文件加载:类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,并存

2020-06-23 22:34:10 451 1

原创 HashMap

tableSizeFor()计算最小的大于等于这个容量的值【2的幂】static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16

2020-06-23 22:28:53 140

原创 AOP

广义理解面向切面编程【Aspect-Orienred Programming】 ,AOP可以说是对OOP的补充和完善,OOP引入封装继承和多态建立一种对象层次结构,用以模拟公共行为的一个集合。实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建"方面",从而使得编译器可以在编译期间织入有关"方面"的代码,属于静态代理AOP的常用功能权限控制缓存控制事务控制审计日志性能监控分布式追踪

2020-06-23 22:25:58 124

原创 封装SpringContext工具类SpringContextUtil

实现自己的SpringContext工具类记录一下自己封装的SpringContextUtil工具类package com.xiaoju.automarket.fate.data.engine.core.service.impl.utils;import org.springframework.beans.BeansException;import org.springframework.beans.factory.NoSuchBeanDefinitionException;import o

2020-06-15 18:51:36 661

原创 三种hive和flink的UDF/UDTF的实现方式

继承UDF类或者ScalarFunction类实现一个或者多个名字为eval的方法,该方法会被hive识别并执行在这里插入代码片package Demo;import org.apache.flink.table.functions.ScalarFunction;/** * @author huki * date 2020-06-09 */public class SimpleUDF extends ScalarFunction { /** * 实现一个在字符串后添加版

2020-06-10 15:06:37 1111

原创 数据库架构解析【数据库拆分,读写分离】

数据库的水平垂直拆分水平拆分以某个字段为依据,按照一定规则(例如取模),将一个库(表)上的数据拆分到多个库(表)中,以降低单库(表)大小,达到提升性能的方法特点每个库(表)的结构都一样每个库(表)的数据都不一样,没有交集;所有库(表)的并集是全量数据;垂直拆分将一个属性较多,一行数据较大的表,将不同的属性拆分到不同的库(表)中,以降低单库(表)大小,达到提升性能的方法特点每个库(表)的结构都不一样;每个库(表)的属性至少有一列交集,一般是主键;所有库(表)的

2020-06-10 14:56:02 174

空空如也

空空如也

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

TA关注的人

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