
java基础
菜鸡旭旭
java爱好者
展开
-
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 评论 -
HashSet和TreeSet
关于java中的set的实现有Treeset和HashSet还有LinkedHashSetset是基于map实现, 而map中的key为set所存的值 而value为空set中元素的去重原理其实就利用的事map中key关键字的唯一性。 此外上面的这些容器都是不安全的,哈哈原创 2018-01-19 16:22:21 · 149 阅读 · 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特性之反射
反射的定义允许程序在运行时进行自我检查,同时允许在运行时对内部成员进行操作反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。Java反射框架主要提供以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);在运行时调...原创 2018-10-05 16:02:09 · 179 阅读 · 0 评论 -
cookie和session
1.简单是因为它只是http一个配置Servlet规范是一个类2.考虑对cookie的数量和大小限制问题3.服务器过多时考虑session管理问题共享问题4.cookie安全问题 cookie被盗、伪造问题5.作用 保持用户与后端的访问状态6.cookie数量过多会占用带宽cookie理解访问时,服务器将键值对返回,加限制条件,如果下次在访问被带回类似与购物办卡设计原因 htt...原创 2019-02-23 13:27:35 · 270 阅读 · 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 评论 -
ConcurrentHashMap
ConcurrentHashMap的实现原创 2018-01-17 16:44:04 · 176 阅读 · 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底层学习(二)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 评论 -
运行时数据区
和其他语言一样jvm需要管理一个供对象分配的内存空间。为支持程序执行,JVM还需要提供一份内存空间作为函数调用栈。jvm在启动时在内存中开辟空间,按照职能划分成不同的区域。这些区域主要包括堆 用来分配java对象和数组的空间。方法区:存储类元数据。栈:线程栈PC寄存器:存储执行指令的内存地址堆和方法区 共享区域 由JVM原创 2018-01-22 16:39:24 · 157 阅读 · 0 评论 -
java特性之泛型
泛型是jdk1.5的新特性 本质是参数化类型,数据类型可以被指定为一个参数 可以用在类接口方法的创建中 泛型的定义和使用在类型后面加一个尖括号,括号内大写字母多泛型变量字母规范 最好E K V T N 泛型的统配符 引用传递 向上传递 向下传递 ?可接受任意的内容 只能接受不能修改 extends 泛型上限 ? extends Number...原创 2017-12-25 14:12:44 · 175 阅读 · 0 评论 -
java对象的创建的5种方式
通常我们会使用依赖管理系统比如容器去创建对象。java也给我们提供了5种创建对象的方式而且这也是非常常见的一道面试题使用new关键 调用了构造函数 使用class的newInstance方法 调用了无参数构造函数 使用Constructor类的newInstance方法 构造调用有参数和私有构造函数 使用clone方法 没有用构造函数 使用反序...原创 2017-11-02 16:03:53 · 221 阅读 · 0 评论 -
线程池的实现原理
强调内容原创 2018-01-17 16:40:28 · 265 阅读 · 0 评论 -
元注解的使用
Target注解范围的使用public enum ElementType { /** Class, interface (including annotation type), or enum declaration */ TYPE, /** Field declaration (includes enum constants) */ FIELD, /...原创 2019-06-19 10:32:54 · 351 阅读 · 0 评论