
java
菜鸡旭旭
java爱好者
展开
-
线程池的实现原理
强调内容原创 2018-01-17 16:40:28 · 265 阅读 · 0 评论 -
ConcurrentHashMap
ConcurrentHashMap的实现原创 2018-01-17 16:44:04 · 176 阅读 · 0 评论 -
java动态代理
动态代理在java中广泛的应用 比如 1.Spring aop 2. Hibernate数据查询 3. 测试后端框架mooc 4. Rpc 5. java注解对象的获取静态代理的代理关系在编译时确定的 静态代理适合代理类较少且确定的java的动态代理有两种 1.原生的jdk代理 2.cglib动态代理实例 静态代理的实现 抽取被代理方法的公共接口 p原创 2018-01-17 18:08:58 · 289 阅读 · 0 评论 -
MQ
消息队列背景: 高并发情况下,来不及同步,请求可能会发生阻塞 例如大量的请求同时到达mysql,导致无数的行锁,表锁,请求堆积过多, 从而触发toomany connections错误。因此可以通过消息队列,异步处理请求,缓解系统压力从rpc 到webservice 到SOA 到Restful 以及云计算的pass与SaaS推广 系统之间的交流更加方便消息的分布式架构原创 2018-01-18 15:29:09 · 286 阅读 · 0 评论 -
HashMap源码学习
面试中经常会被问 所以这里及向总结一下在jdk8中对HashMap做了较大的优化 在数组加链表的基础上加上了红黑树。 在后缀链表结构大于8时转为红黑树数据结构里存的是哈希桶数组Node[] 采用了拉链法解决冲突首先获取到其hashcode值 ,然后通过Hash算法的后两步运算(高位运算和取模运算)来定位该键值对的存储位置如何控制map使得hash碰撞次数概率减少,并且通数原创 2018-01-18 16:34:27 · 198 阅读 · 0 评论 -
闭包
闭包 Ruby之父在> 闭包就是把函数及变量包起来,是变量生命周期延长,并且使得变量可以被外部函数引用。支持lambda语言附带支持闭包Java闭包带来的问题 匿名函数的变量引用,也叫变量引用泄漏,会导致线程安全问题 所以在java8之前 必须将其声明为final类型原创 2018-01-18 17:02:49 · 169 阅读 · 0 评论 -
关于J2EE体系和13个规约
先看一下j2ee体系 JDBC 衍生框架Hibernate Mybatis 需要掌握: 1jdbc原理 以jdbc为接口可以有不同的驱动类 2.处理基本流程 注册diver 创建connection 创建Statement 获取ResultSet 处理返回结果 关闭 3.Prestatement 和statement区别线程池的基本概念和用法JMS 可用产原创 2018-01-18 19:41:07 · 286 阅读 · 0 评论 -
HashSet和TreeSet
关于java中的set的实现有Treeset和HashSet还有LinkedHashSetset是基于map实现, 而map中的key为set所存的值 而value为空set中元素的去重原理其实就利用的事map中key关键字的唯一性。 此外上面的这些容器都是不安全的,哈哈原创 2018-01-19 16:22:21 · 149 阅读 · 0 评论 -
算法学习之动态规划(一)动态规划入门
动态规划一直不敢碰 这次决定死磕了 学不会就学不会 哈哈什么是动态规划动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。 20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(原创 2018-01-19 17:37:36 · 1003 阅读 · 0 评论 -
数据结构之二叉堆
二叉堆 是一棵完全二叉树,插入节点时按照顺序尽量插在左边,采用数组实现,二叉堆规定子节点的值一定小于或者大于父节点。PrioityQueue中二叉堆原理应用 JDK1.5中怎么使用的 PrioityQueue特殊的二叉堆 并且每一层的元素从左往右顺序插入 节点之间有一定的关系 设父节点小标为p 左孩子 下标l 右孩子下标r p=(c-1)/2; l=p*2+1; r=原创 2018-01-30 16:16:56 · 281 阅读 · 0 评论 -
线程池的拒绝策略
关于线程池的四种拒绝策略原创 2017-12-30 17:11:22 · 841 阅读 · 0 评论 -
java(多线程)生产者消费者模式
在企业中,多后台服务程序并发控制的基本原理都可以归纳为生产者/消费者模式。生产者消费者问题是研究多线程程序时绕不开的经典问题之一。问题描述:有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。额外条件不能从空的缓冲区取数据,不能在满的缓冲区放数据。解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产原创 2017-12-30 14:54:57 · 343 阅读 · 0 评论 -
java多线程中的设计模式
在本文开始介绍多线程中的设计模式1.Single Threaded Execution Pattern同一时刻只允许一个线程操作可以理解为串行操作 总结在多线程要访问的方法上加上synchronized关键字2.Immutable Pattern变量赋值一次后只能读取,不能改变比喻 一夫多妻总结 将多线程共享的变量用finnal 修饰原创 2017-12-30 15:34:03 · 548 阅读 · 0 评论 -
类的状态转化
java文件经过编译后转化为跨平台的二进制字节流,为class文件。 class定义了类接口的形式在经过加载 连接和初始化过程后 可被运行时识别的类型和接口就在虚拟机中形成了。class文件格式magic魔数 固定OXcAFEBABE minor_version 此版本 major_version 主版本 constant_pool_count 常量池个数 ac原创 2018-01-22 12:04:54 · 316 阅读 · 0 评论 -
创建对象
在java中 字节码new 表示创建对象当虚拟机遇见该指令时会从栈顶取得目标对象在常量池中的索引,接着定位到目标对象的类型。然后虚拟机根据该类的状态,采取相应的分配技术,在内存中分配实例空间,并完成示例数据和对象头的初始化这样一个对象在jvm中就创建好了。具体创建流程图首先获取对线类型信息并验证是否解析过,若通过采用快速分配否则慢速分配实例的创原创 2018-01-22 12:58:50 · 270 阅读 · 0 评论 -
java概述及jdk历史演变
java开发主要在openjdk项目上JCP 指定技术规范 指定审查JSR目前的jsr有300个jdk发展历史 1996 java 1 1997 java 1.1 jdbc rmi 反射 1998 java1.2 collections jit 2000 java1.3 HotSpot虚拟机 jddi jpda 2002 java 1.4 正则 异常链 ni原创 2018-01-14 14:22:12 · 400 阅读 · 0 评论 -
java底层学习(二)hotspot源码概述和主题模块
HotSpot是jdk的默认版本 被orcle收购 BEA公司的 JRockit IEM公司的 VMHotspot agent目录实现sa src cpu os os_cpu share 独立于操作系统和处理器系统的代码 vm 模块构成了虚拟机内核 tools 主要顶层模块 重要的有 c1 ci opto memory gc interpreterjvm原创 2018-01-14 14:25:07 · 504 阅读 · 0 评论 -
java底层(三)HotSpot的启动
启动Launcher 通用启动器 java命令程序 java javaw 启动一个应用程序 准备jre 加载指定的类 并调用main方法 jre在 1.引导路径 2.已安装扩展 3.用户路径 类被加载之后 将扩展选项传给main方法HotSpot提供了一套非标准选项 标准的vm选项两种启动器 一种产品级 一种调式级 create_vm gamma原创 2018-01-14 14:26:47 · 290 阅读 · 0 评论 -
java底层(四)HotSpot如何表示java对象
我们通常知道 在应用程序的开发中类像是生产线上的模板 按照模板创建出相应类的对象 然后机器按照预定义的指令向不同对象发送消息对象的表示机制对象在jvm内部是如何表现的 内存中如何存储 JVM内部对象的表示系统 面向对象的几个主要特征 封装 继承 多态 HotSpot基于C++实现 假想在HotSpot内为每个java类生成一个C++类 在内部创建域和方法与C++相同的原创 2018-01-14 14:31:05 · 1113 阅读 · 0 评论 -
关于热部署的学习
热部署应用场景 本地调式 线上发布不重启服务器热部署优点 线上 线下都使用 无需重启服务器 提高开发调试效率 提升发布 运维效率 1.热部署原理解析2.java类热加载3.在Spring项目中使用热部署java的热部署和热加载编译 部署 基于类加载器热加载 在运行时重新加载class 热部署 重新加载整个应用 在生产环境SpringB原创 2018-01-14 14:34:18 · 272 阅读 · 0 评论 -
运行时数据区
和其他语言一样jvm需要管理一个供对象分配的内存空间。为支持程序执行,JVM还需要提供一份内存空间作为函数调用栈。jvm在启动时在内存中开辟空间,按照职能划分成不同的区域。这些区域主要包括堆 用来分配java对象和数组的空间。方法区:存储类元数据。栈:线程栈PC寄存器:存储执行指令的内存地址堆和方法区 共享区域 由JVM原创 2018-01-22 16:39:24 · 157 阅读 · 0 评论 -
netty入门
闲的无聊想学习一下netty写个netty入门吧什么是netty有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Proxy服务器等等。我们回顾一下传统的HTTP服务器的原理1、创建一个ServerSocket,监听并绑定一个端口2、一系列客户端来请求这个端口...原创 2018-01-22 21:27:58 · 266 阅读 · 0 评论 -
java命名规范
转载的一篇命名规范转载 2017-12-30 15:52:44 · 168 阅读 · 0 评论 -
能力提升
1.源码阅读 学习经典源码中所用到的经典设计思想及常用设计模式,能够帮你了解大牛是如何写代码的,从而吸收大牛的代码功力。 Mybatis、Spring 常用的设计模式 代理模式 工厂模式 单例 委拖 策略 原型 模板Spring5 IOC AOP FactoryBean BeanFactory 事务处理机制 9大组件 手写mvc mvc和struct2M...原创 2018-07-29 16:41:50 · 164 阅读 · 0 评论