自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 JVM第一话:JVM与Java体系结构

1.JVM与Java体系结构1.1 前言作为Java工程师的你曾被JVM伤害过吗?你是否也遇到这样的问题?运行着线上系统突然卡死,系统无法访问,甚至直接OOM想解决线上JVM GC问题,但无从下手新项目上线后,对各种JVM参数设置一脸懵逼,直接默认然后直接GG面试官经常问你在实际项目中如何调优JVM参数,如何解决GC、OOM等问题开发人员如何看待上层框架一些有一定工作经验的开发人员,打心眼里面觉得SSM、微服务等上层技术才是关键,基础技术并不重要,这其实是错误的!!如果我们把核心类

2021-07-03 13:51:43 233

原创 CS231N深度学习基础篇

2021-06-02 11:12:25 287

原创 第十二话 程序员常用的十种算法

12.1 二分查找算法(非递归)12.1.1 算法的基本介绍前面我们讲过了二分查找算法,是使用递归的方式,下面讲解的是二分查找算法的非递归方式二分查找算法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间O(nlogn),即查找到需要的目标位置最多只需要logn步12.1.2 二分查找算法(非递归)代码实现数组{1,3,8,10,11,67,100},编程实现二分查找,要求使用非递归的递归的方式完成。public class Binar

2021-04-27 14:09:22 245

原创 第十一话 图

11 图为什么要有图前面学习的线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时,这里就需要用到图11.1 图的基本知识图的常用概念[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mVcO26UD-1618541891258)(C:\Users\dongwei\AppData\Roaming\Typora\typora-user-images\image-20210408124420527.p

2021-04-27 14:08:11 91

原创 第十话 多路查找树

10 多路查找树10.1 基础知识介绍二叉树的问题分析[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HEei23Sn-1618541857473)(C:\Users\dongwei\AppData\Roaming\Typora\typora-user-images\image-20210408091745322.png)]二叉树需要加载到内存中,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如一亿个左右),就会存在以下问题问题一:在构建二叉树

2021-04-16 10:57:44 74

原创 第九话 树结构实际应用

9. 树结构实际应用9.1 堆排序9.1.1 堆排序的基本原理堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序堆是具有一下性质的完全二叉树:每个节点的值都大于或等于其左右子节点的值,称为大顶堆。注意:没有要求节点的左右子节点的值的大小关系。每个节点的值都小于或者等于其左右子节点的值,称为小顶堆大顶堆[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3TXq3YD0-1618

2021-04-16 10:57:08 133

原创 第八话 树结构的基本知识

8. 树结构的基本知识8.1 为什么需要树这种数据结构数组存储方式的分析:优点:通过小标方式访问元素,速度快,对于有序数组,还可以使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按照一定顺序)会整体移动,效率低链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,连接到链表中即可,删除效率也很高)。缺点:在进行检索的时候,效率仍然很低,比如(检索某个值,需要从头节点开始遍历)树存储方式的分析能提高数据存储,读取的效

2021-04-16 10:56:15 132

原创 第七话 哈希表

7. 哈希表7.1 哈希表的基本介绍散列表(Hash Table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构,也就是说它通过把关键码映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyZIpfXZ-1618541705884)(C:\Users\dongwei\AppData\Roaming\Typora\typora-user-image

2021-04-16 10:55:18 87

原创 第六话 查找算法

6. 查找算法在java中我们常用的查找算法是:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找6.1 线性查找代码实现public class SeqSearch { public static void main(String[] args) { int[] arr = {1,9,11,-1,34,80}; int index = seqSearch(arr,11); if (index == -1){

2021-04-16 10:54:29 84

原创 第五话 排序算法

5. 排序算法5.1排序算法介绍排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排序的过程排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。常见的排序算法分类[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-thpn5xWQ-1618541456962)(C:\Users\dongwei\AppData\Roaming\Typora\typo

2021-04-16 10:51:40 125

原创 第四话 递归

4. 递归递归简单的说:递归就是自己调用自己,每次调用时传入不同的变量,**递归有助于编程者解决复杂的问题,**同时可以让代码变得简洁。4.1 递归的两个小案例4.1.1 打印问题代码package DataStructures;public class RecursionTest { public static void main(String[] args) { //通过打印回顾递归调用机制 test(4); } public st

2021-04-16 10:50:28 95

原创 第三话 栈

3. 栈基础知识栈的英文是stack栈是一个先入后出的有序列表栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一端,为变化的一端,称为栈顶(top),另一端为固定的一端,称为栈底(bottom)。根据栈的定义,最先放入栈中元素的在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。出栈和入栈的概念示意图栈的应用场景子程序的调用:在跳往子程序之前,先将下一个指令的地址存到堆栈中,直到子程序执行完后再将

2021-04-16 10:49:31 185

原创 第二话 链表

2. 链表2.1 链表原理介绍链表是有序的列表,他在内存中的存储如下:链表是以节点的方式存储每个节点包含data域,next域:指向下一个节点如图:发现链表的各个节点不一定是连续存储链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表(带头结点)逻辑结构示意图:最后指向null表示链表结束2.2 代码实现这个并没有考虑顺序,直接添加到链表的尾部。package DataStructures;public class SingleLinkedListDemo

2021-04-16 10:48:32 84

原创 第一话 稀疏数组和队列

数据结构的分类线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一应的线性关系线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表),顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。线性结构常见的有:数据,队列,链表和栈非线性结构非线性结构包括:二维数组,多维数组,广义表,树结构,图结构。1. 稀疏数组和队列编写的五子棋程序中

2021-04-16 10:46:31 110

原创 人群搜索算法SOA算法-MATLAB

这是基于MATLAB===>针对Sphere函数的SOA算法clc;clear all;close all;format long%参数sizepop = 100;maxgen = 100; m = 10;Umax = 0.9500;Umin = 0.0111;Wmax = 0.9;Wmin = 0.1;popmax = 15;popmin = -15;%初始化种群个体for i =1:sizepop pop(i,:) = 15*rands(1,10); %要

2021-04-02 21:49:55 2759 1

原创 JAVA 多线程基础知识

基础知识进程是代码在数据集合上的一次运动活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一个进程种至少有一个线程,进程中的多个线程共享进程的资源。操作系统在分配资源的时候是把资源分配给进程的,但是CPU资源比较的特殊,它是被分配到线程的,因为真正要占用CPU运行的是线程,所以也就是说线程是CPU分配的基本单位。一个进程种有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程都有自己的程序计数器和栈区域。程序计数器是一块内存区域,用来记录线程当前要执行的指令地址。那么为何要将

2021-01-11 09:55:42 205

原创 JAVA 多线程讲解

创建多线程的方法创建多线程程序的第一种方式:创建Thread类的子类​ java.lang.Thread类:是描述线程的类,我们想要实现多线程的程序,就必须继承Thread类实现步骤:​ 1.创建一个Thread类的子类​ 2.在Thread类的子类种重写Thread类中的run方法,设置线程任务(开启线程要做什么)​ 3.创建Thread类的子类对象​ 4.调用Thread类中的方法start方法,开启新的线程,执行线程的run()方法。​ void star

2020-12-30 10:13:33 100

原创 JAVA 一个简单的服务器和客户机程序

这个例子将以最简单的方式运用套接字对服务器和客户机进行操作。服务器的全部工作就是等候建立一个来连接,然后用那个连接产生的Socket创建一个InputSteam以及一个OutputStream。在此之后,它从InputSteam读入的所有东西都会反馈给OutputStream,直接到接收到行中止为,最后关闭连接。客户机连接服务器,然后创建一个OutputStream。文本通过OutputStream发送。客户机也会创建一个InputStream,用它收听服务器说些什么。服务器和客户机都使用同样的端口号,

2020-12-28 16:51:47 427

原创 图像的几何变换

图片的几何变换几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。一个几何变换需要两部分运算:首先是空间变换所需要的运算,如平移旋转和镜像等,需要用它来表示输出图像和输入图像之间的(像素)映射关系;此外,还需要使用弧度插值算法,因为按照这种变换关系进行计算输出图像的像素可能被映射到输入图像的非整数坐标上。图像平移matlab编程实现A=imread('girl.bmp'); %读入图像%strel 用来创建形态学结构元素%translate(SE, [y,x])

2020-12-24 15:37:44 1115

原创 图像分割算法详解

图像分割边缘检测边缘检测的基本步骤是:平滑滤波:由于梯度计算容易受到噪声的影响,因此第一步是用滤波去除噪声。但是,降低噪声的平滑能力越强,边界强度的损失就越大。锐化滤波:为了检测边界,必须确定某点领域中灰度的变化。锐化操作加强了存在有意义的灰度局部变化位置的像素点。边缘判定:在图像中存在许多梯度不为零的点,但是对于特定应用,不是所有点都有意义。这就要求操作者根据具体情况选择和去除处理点,具体的方法包括二值化处理和过零检测等。边缘连接:将间断的边缘连接成为有意义的完整边缘,同时去除

2020-12-21 10:35:43 3772 1

原创 JAVA List属性方法介绍

List(接口)顺序是List最重要的特性;它可以保证元素是按照规定的顺序进行排列的,List为Collection添加了大量方法,以便我们在List中部插入或者删除(只推荐对LinkedList这样做)。List也会生成一个ListIterator(列表反复器),利用它可在一个列表里朝着两个方向遍历,同时插入和删除位于列表中部的元素(同样的只推荐在LinkedList这样做)。ArrayList由一个数组后推得到的List。作为一个常规用途的对象容器使用,用于替换原先的Vector。允许我们快速访问元素

2020-12-14 10:21:18 816

原创 图像的特征提取

特征提取特征的评价标准特征应当容易提取选取的特征应对噪声和不相关转换不敏感应试图寻找最具有区分能力的特征简单的区域描绘子及其MATLAB实现在经过图像分割得到的各种感兴趣的区域之后,可以利用下面介绍的一些简单的区域描绘子作为代表该区域的特征。MATLAB中,函数regionprops()是用于计算区域描绘子的有力工具,语法如下:stats = regionprops(BW,properties)stats = regionprops(CC,properties)stats = reg

2020-12-14 10:20:06 1384

原创 JAVA Harshtable创建“关键”类——散列码与对象地址的差异

import java.util.Hashtable;class Groundhog{ int ghNumber; Groundhog(int n){ghNumber=n;}// public String toString(){// return Integer.toString(ghNumber);// }}class Prediction{ boolean shadow=Math.random()>0.5; public S

2020-12-01 09:42:41 90

原创 JAVA Hashtable疑难

import java.util.*;class Counter{ int i=1; public String toString(){ return Integer.toString(i); }}public class Statistics { public static void main(String[] args) { Hashtable ht=new Hashtable(); for (int i=0;i&l

2020-11-30 21:08:51 64

原创 JAVA Stack详解

Stack有时候也成为“先入后出”集合,换而言之,我们在堆栈里最后“压入”的东西将是以后第一个“弹出”的。和其他所有的JAVA集合一样,我们压入和弹出的都是“对象”,所以必须对自己弹出的东西进行“造型”。一种很少见的做法是拒绝使用Vector作为一个Stack的基本构成元素,而是从Vector里“继承”一个Stack。这样一来,他就拥有一个Vector的所有特征及行为,另外加上一些额外的Stack行为。很难判断出设计者是明确想这样做还是属于一种固有的设计。import java.util.Stack;

2020-11-30 09:06:45 251

原创 JAVA 程序崩溃的解决

Java标准集合中包含了toString()方法,所以它能生成自己的String表达式,包括它们容纳的对象,例如在Vector中,toString()会在Vector的各个元素中步进和遍历,并为每个元素调用toString()。假定我们现在想打印自己类的地址。看起来简单的引用this即可。import java.util.Vector;public class CrashJava { public String toString(){ return "CrashJava add

2020-11-29 09:49:30 1508

原创 JAVA 如何保证数组里面的值不重复

public class IceCream { static String[] flav={ "Chocolate", "Strawberry", "Vanilla Fudge Swirl", "Mint Chip", "Mocha Almond Fudge", "Rum Raisin", "Praline Cream", "Mud Pie" }; static String[] flav

2020-11-26 22:10:26 1273

原创 JAVA 构建器内部的多形性方法的行为

abstract class Glyph{ abstract void draw(); Glyph(){ System.out.println("Glyph() before draw()"); draw(); System.out.println("Glyph() after draw()"); }}class RoundGlyph extends Glyph{ int radius=1; RoundGlyph(

2020-11-25 20:22:26 96

原创 JAVA 为什么要使用内部类

class EventSet{ private Event[] events=new Event[100]; private int index=0; private int next=0; public void add(Event e){ if (index >= events.length) return; events[index++]=e; } public Event getNext()

2020-11-24 09:40:24 310

原创 JAVA 内部类如何让链接到外部类

迄今为止,我们呢见到的内部类好像仅仅只是一种名字隐藏以及代码组织方案。但是我们还忽略了另外一个重要的事实,创建自己的内部的时候,那个类也拥有指向封装对象的一个链接,所以他们能访问那个封装对象的成员——而不需要任何的资格限制。除此之外,内部类有用对封装类所有元素的访问权限。interface Selector{ boolean end(); Object current(); void next();}public class Sequence { private O

2020-11-22 20:25:35 255

原创 JAVA 内部类和上溯造型

迄今为止,内部类看起来仍然没有什么特别的地方。毕竟,用它实现隐藏显得有些小题大作。Java已经有一个非常优秀的隐藏机制----只允许类成为“友好的”(只在一个包内可见),而不是把它创建成一个内部类。然而,当我们准备上溯造型到一个基础类(特别是一个接口的时候),内部类就开始发挥其关键作用(从用于实现的对象生成一个接口句柄具有于上溯造型至一个基础类相同的效果)。这是由于内部类随后可完全进入不可见或者不可用的状态—对于人个人都是如此。所以我们可以方便的隐藏实施细节。我们得到的全部回报就是基础类或者接口的句柄,而且

2020-11-22 18:58:10 145

原创 JAVA 初始化接口中的字段

接口中定义的字段会自动具有static和final属性。他们不能是“空白final”,但是可以初始化为非常数表达式。interface RandVal{ int rint=(int)(Math.random()*10); long rlong=(long)(Math.random()*10); float rfloat=(float)(Math.random()*10); double rdouble=Math.random()*10;}由于字段是static的,所

2020-11-19 22:03:43 314

原创 JAVA 覆盖与过载

package com.apple;class NoteX{ public static final int MIDDLE_C=0,C_SHARP=1,C_FLAT=2;}class InstrumentX{ public void play(int NoteX){ System.out.println("InstrumentX.paly()"); }}class WindX extends InstrumentX{ public vo

2020-11-17 21:28:17 271

原创 JAVA 多形性

package com.apple;class Instrument3{ public void play(){ System.out.println("Instrument3.play()"); } public String what(){ return "Instrument3"; } public void adjust(){}}class Wind3 extends Instrument3{ public v

2020-11-17 20:26:21 128

原创 JAVA 继承初始化

class Insect{ int i=9; int j; Insect(){ prt("i="+i+", j="+j); j=39; } static int x1= prt("static Insect.x1 initialized"); static int prt(String s){ System.out.println(s); return 47; }

2020-11-14 21:36:44 181 1

原创 JAVA 接口与实现

我们通常认为访问控制是“隐藏实施细节”的一种方式。将数据和方法封装到类里面之后,可生成一种数据类型,它具有自己的特性与行为,有自己的构造方法和构造对象。public class SimpleConstructor { public static void main(String[] args){ for (int i=0;i<10;i++) new Rock(); }但是我们需要对访问的那个数据类型加上限制,有两个重要原因:1.规定使用者

2020-11-13 19:03:16 95

原创 JAVA 编译流程

为JAVA创建一个源码文件的时候,它通常叫做一个“编译单元”。每个编译单元都必须有一个以.java结尾的名字。而且在编译单元的内部,可以有一个public类,它必须拥有与文件相同的名字,否则编译器会发生报错。而且每个编译单元的内部都只能有一个public类,但是编译单元剩下的类可在那个包外面的隐藏,因为他们并非public,而且他们由用于主public类的“支撑”类组成。public class SimpleConstructor{}编译一个.java文件时,会生成一个名字完全相同的输出文件,但是对

2020-11-12 21:42:14 114

原创 JAVA 数组

数组初始化的第二种形式提供了一种更为便捷的语法,可创建和调用方法,获得与C的“变量参数列表”。由于所有类最终都是从通用的根类Object中继承的,所以能创建一个方法,令其获得一个Object数组,package com.apple;class A { int i;}public class VarArgs { static void f(Object[] x){ for (int i=0;i<x.length;i++) System.out.pri

2020-11-12 19:46:21 74

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除