java
文章平均质量分 75
OceanStar的学习笔记
这个作者很懒,什么都没留下…
展开
-
Spark:入门
spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。转载 2022-12-22 20:19:11 · 106 阅读 · 0 评论 -
java:定时器
文章目录time定时器time定时器package com.oceanstar;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Timer...转载 2019-09-23 16:33:30 · 126 阅读 · 0 评论 -
Java中的左移右移详细分析
<< public static void main(String[] args) { int i = -11;// 11 * 8 System.out.println(Integer.toBinaryString(i)); System.out.println(Integer.toBinaryString(i << 1)); System.out.println(i << 3); }&转载 2020-05-21 15:34:25 · 1216 阅读 · 0 评论 -
java:url中特殊字符被转义成编码后如何处理
开发时有时服务端返回的json中包含url,url中可能含有一些特殊字符,这些特殊字符在传输的过程中可能会被转义成编码。这时候我们拿到手里要如何转换回去呢,先看下那些字符可能会被编码例:String url = “http://www.baidu.com/signedUrl%3Fsignature=eyJhbGciOiJSUzI1NiJ9.ey”;这里面的 %3F 应该是 ? ,那么如何...转载 2019-04-07 11:22:15 · 16240 阅读 · 5 评论 -
java:针对多维数组的某一列进行排序
public class Solution { public static void main(String[] args) { int[][] array=new int[5][3]; for(int i=0,j=array.length;i<j;i++){ for(int h=0,k=array[i].length;h&...转载 2020-04-22 16:42:01 · 797 阅读 · 0 评论 -
java:钉钉实现企业级微应用免登陆详解
基本概述钉钉中实现免登陆的核心思想就是通过corpId和corpSecret这两个参数来获得免登陆码Code,继而通过Code来获取用户信息,并在后台数据库中比对该用户信息是否存在,如果比对成功就免登陆成功。具体实现的流程图如下:过程详解1.注册企业用户和创建微应用这个过程比较简单,略过。2.获取corpId,corpSecret,agentId:可以登录钉钉企业用户账号直接获得,可...转载 2019-04-02 10:41:28 · 3598 阅读 · 0 评论 -
java:数组练习
简答题java能动态分配数组吗?可以。int i = 7; int[] array = new int[i];应用:杨辉三角 public static void main(String[] args) { int [][]arr = new int[10][]; for (int i = 0; i < arr.length...转载 2020-03-17 15:33:15 · 3363 阅读 · 0 评论 -
Java编程:Iterator模式
引用C++中显示数组arr中的元素时,我们可以使用下面这样的for循环语句遍历数组。 for(int i = 0; i < arr.length; i++){ printf("%d\t", arr[i]); }数组中保存了很多元素,通过指定数组下标,我们可以从中选择任意一个元素。for语句重的i++的作用是让i的值在每次循环之后自增1,这样就可以访问数组的下一个元素、下下一个元素、再下下一个元素,也就实现了从头到尾逐一遍历数组元素的功能。将这里的循环遍历i的作用抽转载 2021-07-06 17:12:40 · 166 阅读 · 0 评论 -
Java如何生成长度为n,范围为[l, r]的随机整数数组
package com.oceanstar;import java.util.Arrays;import java.util.Random;public class Main { // 生成一个长度为n,范围在[rangeL, rangeR]内的随机数组 public static int[] generateRandomArray(int length, int ra...转载 2019-12-01 19:05:53 · 2093 阅读 · 0 评论 -
Java学习:JDBC
文章目录获取数据库连接编码实现准备连接方式1连接方式二连接方式三连接方式四连接方式五获取数据库连接编码实现准备1、建立一个maven工程,使用quick骨架2、引入依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java...转载 2019-11-13 17:35:40 · 274 阅读 · 0 评论 -
java:如何优化代码中大量的if/else,switch/case?
文章目录前言正文使用枚举善用 Optional表驱动法提前判断返回其他方法关注「深夜里的程序猿」,分享最干的干货前言随着项目的迭代,代码中存在的分支判断可能会越来越多,当里面涉及到的逻辑比较复杂或者分支数量实在是多的难以维护的时候,我们就要考虑下,有办法能让这些代码变得更优雅吗?正文使用枚举这里我们简单的定义一个表示状态的枚举。public enum Status { NEW(...转载 2019-05-07 14:30:17 · 839 阅读 · 0 评论 -
单元测试:Mock对象
为什么要引入mock对象单元测试的目标是一次只验证一个方法,小步的前进,细粒度的测试,但是假如某个方法依赖于其他一些难以操控的东东,比如说网络连接,数据库连接,或者是Servlet容器,那么我们该怎么办呢?要是你的测试依赖于系统的其他部分,甚至是系统的多个其他部分呢?在这种情况下,倘若不小心,你最终可能会发现自己几乎初始化了系统的每个组件,而这只是为了给一个测试创造足够的运行环境让它们可以运行起来。忙乎了大半天,看上去我们好像有点违背了测试的初衷了。这样不仅仅消耗时间,还给测试过程引入了大量的耦合转载 2020-12-31 21:22:07 · 3099 阅读 · 0 评论 -
java对数计算
Java对数函数的计算方法非常有问题,然而在API中却有惊人的误差。但是假如运用了以下的方法,用Java处理数字所碰到的小麻烦就可以轻而易举的解决了。Sun的J2SE提供了一个单一的Java对数方法——double java.lang.Math.log(double),这很轻易使用。请看如下代码: double x = Math.log(5);等价于:x = ln 5 或 x = loge5,即以e为底的自然对数。假如你想使用Java来计算机对数,算底不同的对数又该如何做呢?很遗憾,我们还没有办转载 2020-11-19 20:52:06 · 1895 阅读 · 0 评论 -
Java:HashMap实现原理
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,本文会对java集合框架中HashMap的实现原理进行讲解,并对JDK7的HashMap源码进行分析。什么是哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素.转载 2020-09-01 08:54:47 · 1846 阅读 · 0 评论 -
Java之比较器
文章目录Date类获取当前时间long与date之间转换日期格式化Calendar类Date类获取当前时间import java.util.Date;public class DateDemo { // 获取当前时间 public static void main(String[] args) { Date date = new Date(); ...转载 2019-08-23 11:08:03 · 153 阅读 · 0 评论 -
Java8 -- 处理时间
本地时间APIJava 8 为处理本地的日期时间提供了三个类LocalDate 、LocalTime 和 LocalDateTime。分别用于处理 本地日期、本地时间 和 本地日期时间。当使用这三个类时,开发者并不需要关心时区是什么。因为它默认使用的是操作系统的时区。LocalDate-日期创建LocalDate对象 @Test public void test_start() throws ParseException { // 获取当前日期转载 2020-07-25 13:16:42 · 559 阅读 · 0 评论 -
java之Date(日期)、Date格式化、Calendar(日历)
Date(日期)Date类 注意:是java.util.Date;而非java.sql.Date,此类是给数据库访问的时候使用的时间原点概念所有的数据类型,无论是整数,布尔,浮点数还是字符串,最后都需要以数字的形式表现出来。日期类型也不例外,换句话说,一个日期,比如2020年10月1日,在计算机里,会用一个数字来代替。那么最特殊的一个数字,就是零. 零这个数字,就代表Java中的时间原点,其对应的日期是1970年1月1日 8点0分0秒 。 (为什么是8点,因为中国的太平洋时区是UTC-8,刚好和转载 2020-07-22 13:21:08 · 435 阅读 · 0 评论 -
JDK之String源码分析
文章目录String类的定义final --- 不可继承&&不可变SerializableComparableCharSequence成员变量构造方法String()String(String original)String(char value[])String(char value[], int offset, int count)public String(int[] codePoints, int offset, int count)String(byte[] bytes, int原创 2020-07-15 23:52:39 · 426 阅读 · 0 评论 -
Java String 对象,你真的了解了吗
String 对象的实现转载 2020-07-14 15:26:23 · 157 阅读 · 2 评论 -
字符串String学习
String的特性String类:代表字符串。Java程序中的所有字符串字面值(比如"abc")都作为此类的示例实现。String是一个final类,代表不可变的字符序列字符串是常量,用双引号引起来表示。他们的值在创建之后不可以更改...转载 2020-07-14 14:50:52 · 217 阅读 · 0 评论 -
详解第三种创建线程的方式-Callable接口&线程池
为什么要callable接口前面已经学过的常见线程的方法:一种是继承Thread类一种是实现Runnable接口那为什么还需要第三种呢? 这是因为前两种方法存在着缺陷:现在我们观察里面的run方法,返回的都是void,也就是说这两种方法都不能返回处理后的结果。但是Callable是可以有返回值的callable接口的使用常见线程我们先来创建一个实现了Callable接口的线程。class MyCallable implements Callable<Integer>{转载 2020-07-14 13:27:14 · 428 阅读 · 0 评论 -
java多线程中sleep和wait的4个区别,你知道几个?
sleep与wait的区别是面试中一个非常常见的问题,因为从表象来看,好像sleep和wait都能够使得线程处于阻塞状态,但是却有着本质上的区别。这篇文章就来好好分析一下整体的区别是四个sleep是线程中的方法,但是wait是Object中的方法。sleep方法不会释放lock,但是wait会释放,而且会加入等待队列中sleep方法不依赖于同步器synchronized,但是wait需要依赖synchronized关键字sleep不需要被唤醒(休眠之后自动退出阻塞状态),但是wait需要(需要被转载 2020-07-14 11:43:44 · 492 阅读 · 0 评论 -
一文彻底理解ReentrantLock可重入锁的使用
使用简单使用我们先给出一个最基础的使用案例,也就是实现锁的功能。public class testT { private static final Lock lock = new ReentrantLock(); public static void main(String[] args) { new Thread(()->test(), "线程A").start(); new Thread(()->test(), "线程B").start转载 2020-07-13 17:59:42 · 854 阅读 · 0 评论 -
java中的各种锁详细介绍
java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展示出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关只是。下面给出本文内容的总体分类目录1、乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。转载 2020-07-13 17:22:04 · 706 阅读 · 0 评论 -
java之如何实现线程安全
Java对于多线程的安全问题提供了专业的解决方式:同步机制【锁】同步代码块synchronized (对象){// 需要被同步的代码;}继承同步class Window extends Thread{ private static int ticket = 100; //定义同步监视器,多个线程共同使用唯一的同步监视器 private static Object dog = new Object(); // static确保监视器唯一 @Override.转载 2020-07-13 15:36:09 · 1045 阅读 · 0 评论 -
java之线程的生命周期
JDK中用Thread.State类定义了线程的几种状态要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态, run()方转载 2020-07-12 21:29:13 · 167 阅读 · 0 评论 -
java多线程卖票:继承方式与实现方式的对比
开三个窗口卖票,票一共一百张继承thread接口class Window extends Thread{ private static int ticket = 100; @Override public void run() { while (true){ if (ticket > 0){ System.out.println("卖票, 票根为:" + ticket); .转载 2020-07-12 21:07:23 · 222 阅读 · 0 评论 -
Java中的join(),yield()解读
多线程中让线程等待的方法有很多种,下面我们就来分析这些方法的作用和区别public static native void yield()源码注释翻译向调度器发起一个示意,表明当前线程乐意放弃CPU。调度器可以忽略这一提示。Yield是一种启发式的尝试,用于改进线程之间的相对进展,否则会过度使用CPU.它的使用应与详细的分析和基准测试相结合,以确保它实际上达到期望的效果.Yield方法很少有场景去是和使用.它可能对调试或测试目的很有用,它可能有助于重现因竞争条件而产生的错误.在设计并发控制结构.转载 2020-07-12 17:37:38 · 375 阅读 · 0 评论 -
java多线程之thread入门
Java语言的JVM允许程序允许多个线程。它通过java.lang.Thread类来体现。java通过继承thread类实现多线程定义子类继承Thread类。子类中重写Thread类中的run方法。创建Thread子类对象,即创建了线程对象。调用线程对象start方法:启动线程,调用run方法。// 定义子类继承Thread类class MyThread extends Thread{ public MyThread() { } .转载 2020-07-12 17:00:40 · 195 阅读 · 0 评论 -
什么是线程安全和线程不安全
引入当有多个线程共享同样的内存时:如果线程不会对内存进行读取和修改内存是只读的多个进程对这个内存进行修改,但是写是原子操作时那么线程是安全的当一个线程修改变量时,其他线程在读取这个变量时可能看到一个不一致的值我们需要使用锁来同步线程:同一时间只允许一个线程访问该变量当多个线程试图在同一时间修改同一变量时,因为修改通常不是一步到位的:从内存中读入寄存器在寄存器中修改变量将新值写回内存这个时候可能出现数据不一致,导致程序错误线程安全:指的是多个线程在执行转载 2020-07-10 11:14:24 · 5100 阅读 · 2 评论 -
java 泛型详解
1、概述泛型在java中有很重要的地位,在面向对象编程以及各种设计模式中有非常广泛的应用。什么是泛型?为什么要用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的参数变量,此时类型也定义成参数形式(可以称之为类型形参)泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指转载 2020-07-09 14:08:03 · 156 阅读 · 0 评论 -
Iterator和Iterable的区别
回顾迭代器模式java提供了很多集合类,而迭代器模式就是提供一种方法,顺序访问聚集的对象。而又不暴露该集合的内部表示。迭代器模式设计:抽象迭代器、具体迭代器、抽象容器、具体容器迭代器模式的核心就是把遍历集合对象的行为与集合类进行分离了,遍历集合对象的类叫做迭代器。Iterator接口java中使用迭代器模式实现Iterator接口,用于对集合类的访问(遍历),新增,删除等操作。而Iterator接口只是java提供的一种抽象迭代器。对于具体迭代器,在不同集合类中实现自定义的具体迭代器;这样避免暴露转载 2020-06-05 10:54:17 · 733 阅读 · 0 评论 -
Java 中iterator和iterable的关系是怎样的
迭代器模式在容器里存放了大量的同类型对象,我们如果想逐个访问容器中的对象,就必须要知道容器的结构。比如,ArrayList 和 LinkedList 的遍历方法一定是不一样的,如果再加上HashMap, TreeMap,以及我们现在正在研究的BinarySearchTree,对于容器的使用者而言,肯定是一个巨大的负担。作为容器的使用者,我肯定希望所有的容器能提供一个统一的接口,这个接口可以遍历容器中的所有内容,又可以把容器的细节屏蔽掉。Iterator上定义了各种方法,用于遍历。例如: pub转载 2020-06-04 18:25:48 · 458 阅读 · 0 评论 -
Integer.highestOneBit(int i)方法的作用与底层实现
在Integer类中有这么一个方法,你可以给它传入一个数字,它将返回小于等于这个数字的一个2的幂次方数。这个方法就是highestOneBit(int i)。比如下面的Demo,注意方法的输入与返回值:System.out.println(Integer.highestOneBit(15)); // 输出8System.out.println(Integer.highestOneBit(16)); // 输出16System.out.println(Integer.highestOneBit(1转载 2020-05-22 11:38:09 · 266 阅读 · 3 评论 -
Java中计算对数
1. 问题描述:2. 下面是具体的代码:public class Main { public static void main(String[] args) { double res = log(2, 32); System.out.println(res); res = log(2, 10); System.out.println(res); } public static double log(int basement, int n){ return Math.log转载 2020-05-21 17:24:39 · 649 阅读 · 0 评论 -
Java 实例 - 队列(Queue)用法
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用 public static void main(String[] args) { Queue<String> queue = new LinkedList<>(); queue.offer("a"); queue.offer("b"); .转载 2020-05-13 09:07:16 · 283 阅读 · 0 评论 -
java如何根据二进制流确定图片的类型
因为仅仅通过后缀名我们并不能得知用户是否把图片的类型更改为其他类型.public enum ImageType { PNG('P','N','G','-',"PNG"), JPG('J','F','I','F',"JPG"), GIF('G','I','F','-',"GIF"); private char begin, mid, end, last; private String type; private ImageType(char begin, char mid, char end.转载 2020-05-09 20:57:44 · 1552 阅读 · 0 评论 -
Java之异常处理
在使用计算机语言进行项目开发的过程中,又很多问题不是能够靠代码解决的,比如:客户输入数据的格式,读取文件是否存在,网络是否ping转载 2020-05-08 15:47:58 · 448 阅读 · 0 评论 -
Java中判断字符串是否为数字的2种方法
//方法一:用JAVA自带的函数public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (!Character.isDigit(str.charAt(i))){ return false; } } retur...转载 2020-05-08 14:38:36 · 263 阅读 · 0 评论 -
Java8 - Map更优雅的迭代方式:forEach
BiConsumer用于两个参数之间进行操作的函数式接口是 BiConsumer。这个函数式接口正好用来操作 Map 的 key 和 value。JDK8强化了针对 Map 类的迭代方式,新增了一个默认方法 forEach,它接收一个 BiConsumer 函数。JDK给出的描述如下:Performs the given action for each entry in this map u...转载 2020-05-07 20:44:08 · 273 阅读 · 0 评论