日常场景:某活动抽奖,控制各等奖的出现概率 比如控制A(中奖率):20%:B(获得优惠券率):30%:C(谢谢参与率):50% 下面以封装好在main()函数里,上代码(记得导入相应的包): public class Probability { public static void main(String[] args) {/** * 先来一个简单通用的解决方案 * 需求:生成A(一等奖):20%;B(二等奖):30%;C(不中奖):50% */ double num; Map<String ,…
一点一点看JDK源码(六)java.util.LinkedList前篇之链表概要 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.什么是链表 链表是一种常见的数据结构,属于一种线性表. 虽说链表是线性表,但是其储存的方式并非是线性的,而是节点(Node)方式存储的. 每一个节点都含有一个指针,指向下一个节点. 同时每一个节点都存有自身的数据信息. 链表有点像衣服的拉链,是一个扣一个的,每两个之间都有一个间隔,要想获取某个位置的数据…
, 摘录自葛一鸣与郭超的 [Java高并发程序设计]. 本文主要介绍了死锁的概念与一些相关的基础类, 摘录自葛一鸣与郭超的 [Java高并发程序设计]. 无锁是一种乐观的策略, 它假设对资源的访问是没有冲突的, 所有的线程都可以不停顿地持续执行, 它采用一种叫做比较交换的技术 (CAS Compare And Swap) 来鉴别线程冲突, 如果出现冲突, 重试操作, 直到没有冲突为止. CAS CAS算法包含三个参数 CAS(V, E, N). V表示要更新的变量, E表示预期值, N表示新值.…
Java学习之jackson篇 0x00 前言 本篇内容比较简单,简单记录. 0x01 Json 概述 概述:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据.简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率. 这里复制了一段百度百…
概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3480016.html 1. 生产/消费者模型 生产/消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下:(01) 生产者仅仅在仓储未满时候生产,仓满则停止生产.(02) 消费者仅仅在仓储有产品时候才能消费,仓空则等待.(03) 当…
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchronized代码块4. 实例锁 和 全局锁 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479202.html 1. synchronized原理 在java中,每一个对象有且仅有一个同步锁.这也意味着,同步锁是依赖于对象而存在.当我们调用某对象的sy…
概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程.关于线程池的内容,我们以后会详细介绍:现在,先对的Thread和Runnable进行了解.本章内容包括:Thread和Runnable的简介Thread和Runnable的异同点Thread和Runnable的多线程的示例 转载请注明出处:http://www.cnblogs.com/skywang1234…
概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start() 和 run()相关源码(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479083.html start() 和 run()的区别说明 start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法.s…
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long timeout)和notify()4. wait() 和 notifyAll()5. 为什么notify(), wait()等函数定义在Object中,而不是Thread中 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479224.html wait(…
概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479243.html 1. yield()介绍 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权:但是,并不能保证在当前线程调用yield()之后,其它…
概要 本章,会对Thread中sleep()方法进行介绍.涉及到的内容包括:1. sleep()介绍2. sleep()示例3. sleep() 与 wait()的比较 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479256.html 1. sleep()介绍 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”.sleep()会指定休眠时间,线程休眠的时间…
概要 本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479275.html 1. join()介绍 join() 定义在Thread.java中.join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行.这句话可能有点晦涩,我们还是通过例子去理解: // 主线程 pub…
概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于“阻塞状态”的线程2.2 终止处于“运行状态”的线程3. 终止线程的示例4. interrupted() 和 isInterrupted()的区别 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479949.html 1. interrupt()说明 在介绍终止线程的方式之前,有必要先对inter…
概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479982.html 1. 线程优先级的介绍 java 中的线程优先级的范围是1-10,默认的优先级是5.“高优先级线程”会优先于“低优先级线程”执行. java 中有两种线程:用户线程和守护线程.可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程…
上次的博文中Java修炼 之 基础篇(一)Java语言特性我们介绍了一下Java语言的几个特性,今天我们介绍一下Java语言的构成.        所谓的Java构成,主要是指Java运行环境的组成,从外围到核心依次是Java开发工具包JDK(Java Develop Tookit).Java运行时环境JRE(Java Runtime Environment).Java虚拟机JVM(Java Vitual Machine). JDK JDK主要提供了一些用Java语言开发的组件(javac.ex…
♣安装的几种方法和比较 ♣配置yum源 ♣安装mysql ♣启动mysql ♣修改密码 ♣导入.sql文件 ♣缓存设置 ♣允许远程登录(navicat) ♣配置编码为utf8  1.关于Linux系统的软件安装方法有很多种,目前常用是二进制安装,rpm安装,源代码安装,对这几种安装方法都有优点和缺点,现在将这些安装方法总结如下:    二进制包:安装简单,可以任意选择购软件版本,不需要编译,直接初始化就行了    rpm安装:此安装方法需要解决依赖包,可以安装指定软件版本    源代码:安装比较…
♣下载安装tomcat7 ♣设置启动和关闭 ♣设置用户名和密码 ♣发布java web项目 声明:这篇教程是建立在前两篇教程的基础上的,所以,还没安装工具和jdk,可以先看这个系列的前面两篇(去到文末找超链接喔!). 1.下载安装tomcat7 1.1在Xshell中使用命令跳转到local下面创建者自己的文件夹tomcat cd /usr/local/ mkdir tomcat cd  tomcat/  1.2下载tomcat7 下载tomcat7:  http://tomcat.apache…
从.Net到Java学习系列目录 通过前面10篇文章的学习,相信我们对SpringBoot已经有了一些了解,那么如何来验证我们的学习成果呢?当然是通过做项目来证明啦!所以从这一篇开始我将会对之前自己做的.net项目用java来重写.这一篇,我们来现实登录模块. 一提到登录,我们首先想到的基本的功能点就有如下: 输入:用户名.密码.验证码. 登录成功后,跳转到后台.如果未登录直接访问后台,将会跳转到登录页面. 这里暂不考虑复杂的登录实现. 技术选型,沿用前面用到的知识点.那么这里较之于之前的文章,…
Java笔记(提高篇)整理   主要内容: 面向对象 异常 数组 常用类 集合 IO流 线程 反射 Socket编程 1.  面向对象 1.1包 用来管理Java中的类, 类似文件夹管理文件一样. 因为同一个包中不能出现同名的类, 不同包中的类名可以相同, 所以包可以解决类名命名冲突问题 Java提供了若干的类, 分别放在不同的包中, 本阶段可能使用的包: Java.lang  是Java语言的基础包,系统自动导入,其中的类可直接调用,如System,String   Java.util    …
<JAVA遇见HTML——Servlet篇> Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Servlet时执行的,负责初始化Servlet对象.可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet.无论有多少客户机访问Servlet,都不会重复执行init(). service():它是Servlet的核心,负责响应客…
java基础2-容器篇 1.页首请关注 思维导航大纲 1.常用容器的类型层次结构 2.理解容器的常用思维大纲 a.空间 时间 concurrentModifyException 加载因子 3.常用类源码 List HashMap ConccurentHashMap 4.容器在框架中的使用 Mybatis LRU- LinkedList  FIFO LinkedHashMap 5.容器工具 Collections Arrays Guava Cache…
一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代码比较简单 ArrayList的forEach方法需要实现Consumer接口,实现其未实现的方法即可 该方法返回值为void,实际上就是任意写的了,代码如下: package com.FM.ArrayListStudy; import java.util.ArrayList; import jav…
一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparator liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) Comparator为额外实现的比较接口,与类本身无关 该接口在ArrayList的sort中有应用(很多时候都可以用的,只是以此举例) Comparator接口主要用途有两种, 1.比较有序集合内任意两个元素A.B(完全遍历的compareTo方法,于compare方法内实现) 若A…
一点一点看JDK源码(五)java.util.ArrayList 后篇之SubList liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) SubList可以将一个数组根据index拆分为多个数组,使用多线程对于数组进行遍历 未使用多线程的代码比较简单,代码示例如下: package com.FM.ArrayListStudy; import java.util.ArrayList; import java.util.List; publ…
一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) Spliterator为jdk1.8新增接口,由ArrayList.spliterator();获得其返回值对象Spliterator. 该对象可以使用trySplit进行迭代器拆分,每次拆分后的迭代器接近上一次的二分之一. 这是官方对于大数据量数组多线程遍历加工的一种趋势性指引.…
一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) Predicate为jdk1.8新增接口,由ArrayList.removeIf(Predicatep)调用. 使用起来也比较方便,从ArrayList中移除Predicate 中test方法的返回值(boolean)来确定是否删除, 示例代码如下: package com.FM…
[JAVA秒会技术之秒杀面试官]秒杀Java面试官——集合篇(一) [JAVA秒会技术之秒杀面试官]JavaEE常见面试题(三) http://blog.csdn.net/qq296398300/article/category/6876287…
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 大家都知道,正则表达式是一种可以…
1.像使用普通java类一样,创建javabean实例,利用构造方法创建实例 跟表单关联,“*”表示根据名称来进行匹配,就是根据表单所提交过来的参数的名字和Javabean当中的属性名字来进行一一匹配,如果匹配上了,就自动赋值 与上一篇JAVA遇见HTML——JSP篇(JSP内置对象下)实现用户登录功能的区别: 上一篇:1.单纯使用jsp实现 2.取得用户的登录的用户名和密码: 使用request.getParameter来获取参数的值 username = request.getParamet…
Java学习之反射篇 0x00 前言 今天简单来记录一下,反射与注解的一些东西,反射这个机制对于后面的java反序列化漏洞研究和代码审计也是比较重要. 0x01 反射机制概述 Java反射是Java非常重要的动态特性,通过使用反射我们不仅可以获取到任何类的成员方法.成员变量.构造方法等信息,还可以动态创建Java类实例.调用任意的类方法.修改任意的类成员变量值等.Java反射机制是Java语言的动态性的重要体现,也是Java的各种框架底层实现的灵魂. 0x02 Java反射 Java反射操作的是…