Java / Java虚拟机 / javaweb
文章平均质量分 80
哈哈满
Have Dreams, Will Travel!
展开
-
long究竟有多大?大概是把它单纯的遍历一遍,要花190年!
一、背景公司hr给了我一段代码,她给我说可以输出 “hello world”,我看到代码的那一刻,说实话,不太信!所以我跑了一下,发现:我靠,原来还真是啊!到底是为什么呢?代码如下:public static void main(String[] args) { System.out.println(randomString(-229985452) + " " + random...原创 2019-06-20 16:28:32 · 1702 阅读 · 0 评论 -
虚拟机字节码执行引擎
虚拟机的执行引擎是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。从外观上看,所有的java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析过程,输出的是执行结果1.运行时栈帧结构 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部原创 2016-02-13 20:41:03 · 758 阅读 · 0 评论 -
Lock与synchronized 的区别
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断 如果 使用ReentrantLock,如果A不释放,可以使B在转载 2016-05-10 17:13:04 · 455 阅读 · 0 评论 -
java网络编程(下)
一、客户端Socket定义:Socket是两台主机之间的一个连接,一单建立了连接,本地和远程主机就从这个socket得到输入流和输出流,使用这个流可以同时发送和接收数据。Socket对程序员掩盖了网络的底层细节,如错误检测、包大小、包分解、包重传、网络地址等。1.构造和连接 SocketjavanetSocket 类是java完成客户端 TCP 操作的基础类,这个类使用原创 2016-07-24 09:22:18 · 974 阅读 · 0 评论 -
java网络编程(上)
Internet 地址IPv4 32 位,4字节IPv6 128位,16字节,共8区块,每个区块2字节一个域名可以映射到多个ip地址,负载均衡,但每个时刻一个域名只能映射到一个;一个ip可以有多个域名。一、InetAddress包括一个主机名和一个ip地址1.创建静态方法:InetAddress.getByName(namestr原创 2016-07-16 21:55:27 · 1899 阅读 · 0 评论 -
java并发之线程池Executor知识要点 及 核心源码浅析
1.什么是线程池定义:线程池是指管理一组同构工作线程的资源池组成部分:线程管理器(ThreadPool):用于创建并管理线程池。包括创建线程池,销毁线程池,添加新任务工作线程(PoolWorker):线程池中的线程任务接口(Task):每个任务必须实现的接口,一共工作线程调度任务的执行任务队列:用于存放没有处理的任务,提供一种缓冲机制2.为什么要使用线程池通过重用现原创 2016-06-16 17:05:46 · 2000 阅读 · 1 评论 -
垃圾收集器与内存分配策略——对象的生命、垃圾收集算法
为什么要了解垃圾回收?——当需要排查各种内存溢出、内存泄露问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节 如何判断对象已死? ①引用计数法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,;当引用失效时,计数器值就减1;任时刻计数器为0的对象就是不可能再被使用的。但是虚拟机并不是这样操作的原创 2016-01-22 09:57:29 · 753 阅读 · 0 评论 -
java虚拟机运行时数据区域及对象的探秘
程序计数器java虚拟机本地方法栈java堆方法区运行时常量池直接内存是什么可以看做是当前线程所执行的字节码的行号指示器栈 所有线程共享的一块内存区域,在虚拟机启动时创建所有线程共享的一块内存区域方法区的一部分不属于运行时数据区特点为了线程切换后能恢复到正原创 2016-01-20 20:14:02 · 767 阅读 · 0 评论 -
状态机学习与思考
1、 基本概念1.1 状态状态:是事物的一种属性,指事物表现出来的行为和形态。对象状态是指对象或所属类的的所有属性的当前值1.2状态机状态机图即为状态机,实质上是由一种由状态、转移、事件和动作组成的状态机。它描述了一个对象在生命周期内所经历的各种状态,状态之间的转移,发生转移的动因、条件以及转移中所执行的活动。状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动...原创 2019-05-16 16:34:36 · 872 阅读 · 0 评论 -
Java8 新特性
Java 8 新特性Lambda Expressions1. Lambda 表达式是什么?什么时候可以使用?Lambda 表达式式Java8的新特性,它支持了Java简单的“函数式编程”。根据 官方文档表示,当一个匿名类有且只有一个抽象方法时,就可以使用Lambda表达式。而可以作为一个匿名类的前提是存在这样的一个接口或者抽象类,但是该表达式只能够针对有 “@FunctionalInterfac...原创 2018-07-07 20:46:39 · 265 阅读 · 0 评论 -
在线考试系统之随机抽取试题
这几天做了一个在线考试系统,下面是数据表。大概思路:就是根据学生选择的老师和科目 —— 得到那个老师对于这个科目的题型设置 ——然后根据题型设置取到对应科目的题集——再随机选出老师设置对应题目类型的个数的题——把随机选出的题显示给学生答题——因为涉及到一个学生只有一次考试资格,所以设置了学生第一次取到题后刷新不能继续随机抽取试题,所以需要把第一次抽取出来的试题显示出来。原创 2015-12-06 13:44:59 · 18680 阅读 · 3 评论 -
Linux 操作系统的权限为什么是1,2,4 而不是 1,2,3?如何用二进制来做权限管理
1. 二进制做权限的优点大家都知道,在Linux操作系统中,x - 可执行权限,w - 可写权限 , r - 可读权限。其权限值分别是1,2,4,但是有没有想过为什么是1,2,4 而不是 1,2,3 呢?OK , 现在是不是发现 1,2,4 分别对应着2的幂次方(2^0、2^1 、2^2),在计算机中都是以二进制的方式进行存储,在计算时二进制的方式会更快。举个例子:如果一个人拥有读和写的权原创 2017-05-15 10:56:05 · 4357 阅读 · 1 评论 -
《effective Java》读后笔记
说明:一下内容全部摘自《effective java》一书1. 使用静态工厂方法代替构造器优势:有名称,可以区分不同的重载构造器不必再每次调用的时候都创建一个新对象(重复利用,返回成员变量);返回同一个对象,当用equals判断式可以用 == 代替,因为 == 方法更快可提升性能。实例受控:Singleton,不可实例化,确保不会存在另个相等的实例可以返原创 2016-11-15 19:23:24 · 2567 阅读 · 0 评论 -
java并发编程知识要点总结
java并发编程一、关于并发并发是什么?并发是指在同一时间间隔内,有多个程序处于运行状态。当然,同一时刻只有一个程序在运行。与之对应的是并行,并行是指同一时刻有多个程序同时执行(宏观上)为什么需要并发?为了提高系统的资源利用率 和 吞吐量。就好比全班需要填表时,可以发给每个人,然后填完之后在收起来,这样的效率远比一个一个的发,然后等第一个人填完了再发给第二人填写要快原创 2016-07-11 15:48:57 · 1612 阅读 · 5 评论 -
深入IO之 IO的工作机制 & IO模型
基础一、流1.读写字节(视频、图片) public abstract class InputStream implements Closeable { abstract int read(); //从数据中读入一个字节,并返回该字节 int read(byte[] b);//读入一个数组 int read(byte[] b,int off,int len); int avail原创 2016-10-14 22:21:03 · 2269 阅读 · 0 评论 -
关于DAO和分页实现
1.关于DAO 1)接口DAO一般具有insert、update、query、queryForList、getSingleValue、batch等方法 2)其实现类BaseDAO一般通过QueryRunner实现其所有方法,在这个实现类中会有clazz私有属性,为的是获取泛型参数类型 》public BaseDao() {原创 2015-07-30 09:36:58 · 2058 阅读 · 0 评论 -
JSessionId谈cookie与session的区别和联系
1:在一些投票之类的场合,我们往往因为公平的原则要求每人只能投一票,在一些WEB开发中也有类似的情况,这时候我们通常会使用COOKIE来实现,例如如下的代码:cookie[]cookies = request.getCookies();if (cookies.lenght == 0 || cookies == null)doStuffForNewbie();//没有访问过 }转载 2015-10-29 19:12:15 · 3715 阅读 · 0 评论 -
javaWeb常见异常的解决方法
1.如果不能给属性赋上值,就检查getter 和 setter方法;2.如果不能创建对象,检查是否有空参的构造函数3.注意文本需要去除回车、换行符,不然修改回显数据时前端会报错4.原创 2015-11-15 21:31:05 · 2313 阅读 · 0 评论 -
Struts2返回JSON对象的方法总结
一、为什么struts2要返回json 如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择。而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好的支持。但是,在开发工作中,对功能的升级是基于既定架构是很常见的情况。本人碰到需要用开发基于Struts2的HTTP+JSON返回类型接口就是基于转载 2016-04-08 21:13:36 · 773 阅读 · 0 评论 -
java虚拟机之垃圾收集器、内存分配与回收策略、GC都干了些什么
JDK1.7 Update14 之后 HotSpot虚拟机,两个虚拟机之间有连线的说明可以搭配使用收集器新生代 or 老年代单线程 or 多线程目标特点联系 or 适用Serial收集器新生代单线程 1.是最基本、发展历史最悠久的收集器2.老而无用、食之无味弃之可惜原创 2016-01-24 20:51:28 · 1134 阅读 · 0 评论 -
Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度
一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为Ar...转载 2016-05-08 19:52:13 · 11439 阅读 · 6 评论 -
Java集合---ConcurrentHashMap原理分析
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅转载 2016-05-10 13:40:19 · 489 阅读 · 0 评论 -
hashMap源码解析
1、hashmap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),请看下图(横排表示数组,纵排表示数组元素【实际上是一个链表】)。转载 2016-05-10 12:42:54 · 532 阅读 · 0 评论 -
JDK源码分析:java.lang.Boolean
首先我们剔除所有的方法和静态变量,Boolean的核心代码如下:public final class Boolean implements java.io.Serializable,Comparable { private final boolean value;}很明显,凡是成员变量都是final类型的,一定是immutable class,这个Boolean和Strin转载 2016-04-13 09:13:51 · 801 阅读 · 0 评论 -
Java源码分析:深入探讨Iterator模式
java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理。本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很转载 2016-04-13 08:33:09 · 508 阅读 · 0 评论 -
序列化与反序列化
1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。 2、什么情况下需要序列化 a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;转载 2016-03-21 08:42:24 · 518 阅读 · 0 评论 -
JAVA的String、StringBuilder和StringBuffer类的区别
StringBuffer类(或者StringBuilder)和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。在S转载 2015-12-25 11:56:05 · 1063 阅读 · 0 评论 -
理解threadlocal
ThreadLocal是什么早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它转载 2015-10-29 16:26:50 · 387 阅读 · 0 评论 -
HashSet判断唯一性的步骤
HashSet 判断唯一性的不是两个步骤而是三个步骤1.HashCode()2.==3.equals()前面的比较会短路后面的比较 ; 也就是说 1 &&( 2||3)底层是由Map存储数据的 , 用key 存储 下面来看一下 判断唯一性的步骤:为了看到测试效果就没有按照规则来重写hashcode 和 equals 方法下面的person类是原创 2015-09-06 14:21:29 · 2254 阅读 · 0 评论