自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

romantic_jie的博客

小白的成长之路

  • 博客(120)
  • 收藏
  • 关注

原创 MAVEN打包这一篇就够了

maven打包。配置文件外置。本地获取不到配置文件。配置文件冲突。编译执行目录结构。打包目录,打包方式,整体打包!

2023-02-13 15:51:26 7340

原创 Recast-Detour看这里就够了!

一文详解recast-detour。游戏导航地图生成,寻路算法,多边形寻路算法,A星算法,选点,优化,路径平滑,漏斗算法,射线探测算法等,如有错误,望不吝赐教!

2023-01-30 10:07:17 2387

原创 游戏寻路之射线探测详解

算法说明 该图为俯视图,所有信息均为三维空间在底面上的二维投影算法的目的是检测起始点S到终止点N之间是否可以直线通过,并且求出射线SN所经过的多边形(下述称“路径多边形”),进而得到射线SN与路径多边形的相交边(相交边分为:“进入边”和“穿出边”),并且求出与每一条相交边的交点坐标(由于某些需求使用,该交点需要得到其三维信息)。如果点S到点N之间不存在直线通过,则需要求解出第一个不可通过的相交点。例如,三角形ABC、BCD、CDE、DEF均为路径多边形,边BC、CD、D...

2021-03-03 16:08:41 1205 2

原创 游戏寻路之平滑路径—拉绳(漏斗)

String Pulling拉绳算法(漏斗算法)平滑路径目录1. 算法概述2. 算法详解3. 算法思考1. 算法概述上图为三角形导航网格,S为寻路起点,End为寻路终点。该图为基础A星算法寻路后的多边形路径,其中A星算法是以三角形边中点作为距离运算的迭代点的。该图为漏斗算法优化后的路径点,最终为S,D,G,End。可以明显的看出基础A星在非规整导航网格中的路径结果是不平滑的,有种左右摇摆的感觉,而漏斗算法就是解决路径平滑问题的。2. 算法详解所

2021-02-24 10:51:31 5341

原创 java语法糖--自动装箱和拆箱详解

JAVA中最常用的语法糖--自动装箱和拆箱一,究竟什么是自动装箱和拆箱1.1 我们直接来看一段非常简单的实例代码: public static void main(String[] args) { int intValue = 100; Integer boxValue = intValue; int value = boxValue; }相信上述代码是每个java程序员都能看懂的,但是,问题来了:为什么基本类型i.

2020-10-10 21:21:41 993 2

原创 内容一样的String在HashMap中散列的过程和结果

探究String和HashMap中的Hash()问题先来认识一下相关的源码首先String本身是final的,其字符串的实现原理就是实现了CharSequence接口,并且将字符串内容保存在了自身内部的一个final的char数组中,另外,String内部有个私有的int常量值,hash值,注意该值是直接作为内部量保存的,默认值为0。其实,哪怕第一次接触String,也应该想到,保存hash量,就相当于一个缓存,保证了在计算出hash值后,以后每次获得hash值的时间复杂度为O(1)。看S.

2020-09-17 13:31:04 431

原创 你真的了解Integer.parseInt()方法吗???

public static int parseInt(String s, int radix) throws Exception { /** 对字符串判空,注意这里并不是没有判断空内容(长度为0的空串),下面判断了 */ if (s == null) { throw new RuntimeException(); } /** Character.MIN_RADIX这个是java字符支持的最小进.

2020-08-21 22:10:41 1803

原创 简单实现一个自定义类加载器

前言:本文只为作者练习使用,后续复习使用。package com.MyCustomizeClassLoaderTest;import java.io.FileInputStream;/** * 实现自定义类加载器,需要继承java.lang.ClassLoader * 然后根据ClassLoader内的loadClass()方法的逻辑: * 我们需要重写 findClass()方法,实现自己的类加载器 * * 重写findClass()是为了不破坏loadClass()中的 .

2020-08-07 20:20:52 279 1

原创 根据配置CLASSPATH彻底弄懂AppCLassLoader的加载路径问题

1.前言 相信任何使用JAVA语言的开发者,都会在一台新的PC上去装上JDK,JRE,用来可以编译我们所写的.java文件,然后让其生成编译后的.class文件,从而能够争取执行。。。有兴趣可以简单了解一下JDK和JRE的作用。 当我们装上JDK的时候,相信大家还会经历非常重要的一步,就是配置环境变量。并且,毫不避讳的说,初次接触java的初学者,总是在配置环境变量的时候,一头雾水,那我们今天就来以配置环境变量为问题切入点,彻底搞懂他究竟涉及到哪些比较核心的问题-----类加载器。。。2.问..

2020-08-07 17:37:29 5546 11

原创 逐步引出堆思想并实现优先级队列

先看一个再熟悉不过的算法题:有一个长度为n的无序数组,元素为整形int值,如何找到前K(K <= n)个最小(或者最大)的元素。相信任何一个从事IT编程的人都听过这个有趣的问题,俗称TopK问题。。。。我们现在来分析解决这个问题(以得到前K个最小值为例):(注意,本文是以该问题一点一点引出堆思想,并没有深入优化topk问题的最优解,本文的重点是堆)1.排序首先,最容易想到的方法就是对无序数组进行排序,然后很容易得到前K个最小值。这样问题被转化成了数组排序,那么自然而然...

2020-08-04 16:40:26 303

转载 CPU Cache下的伪共享和缓存行

本文转载自https://blog.csdn.net/karamos/article/details/80126704认识CPU CacheCPU Cache概述随着CPU的频率不断提升,而内存的访问速度却没有质的突破,为了弥补访问内存的速度慢,充分发挥CPU的计算资源,提高CPU整体吞吐量,在CPU与内存之间引入了一级Cache。随着热点数据体积越来越大,一级Cache L1已经不满足发展的要求,引入了二级Cache L2,三级Cache L3。(注:若无特别说明,本文的Cache指CP.

2020-08-03 21:05:35 365

原创 JAVA中Class.forName()和ClassLoader.loadClass()对比

先上代码抛出问题:package com.myClassLoaderTest;/** * 用于对比的测试类 * 1.该类中有静态代码块。 * 2.测试Class.forName和classLoader的不同 * * 测试结果 * * @ Author: liu xuanjie * @ Date: 2020/7/29 */public class TestObject{ public static int value = 1; public TestO

2020-07-29 12:41:10 329

原创 面向使用的java注解简单总结

本篇文章不是从零介绍注解的基础知识,也不会以一种专业名词介绍专业名词的方法去解释注解的含义和作用。只是通过较为简单的例子和一些关于注解的基本使用知识来迅速的达到能够使用注解的情况。供复习使用。其实,注解的内容并不多,上手很简单,分别为,java中自带的系统注解,自定义注解,元注解三个方向。1. java中自带的系统注解相信只要是使用过java的人都看到过这个东西。这个东西是啥???相信你会立刻回答出,这个东西告诉我们实现Runnable接口,必须实现来自接口中未实现的run方法。.

2020-07-13 21:26:04 238

原创 java反射基础常用总结

package com.test2;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * 作者:****** * 功能:反射相关知识的复习(在注释中简单表明核心作用,供遗忘后复习使用) */public class ReflectTest{ public static void main(String args[]) t.

2020-07-13 20:21:54 164

原创 多线程安全的单例模式进阶

package com.MySingletonTest;/** * Created by liuxuanjie on 2020/01/08. * 单例模式的创建,保证多线程安全 * * ps: * 这是第一种方式,直接在类加载的时候创建一次 */public class MySingleton1{ //私有静态自身引用 private static MySi...

2020-01-08 15:13:25 291

原创 log4j2采用AsyncLogger的错误解决方案

配置文件,配置日志打印控制:Appender采用默认同的(不额外加异步控制的Async)Logger采用异步的AsyncLogger(root无所谓)如果此时是这样配置的,也就是想要使用AsyncLogger + (sync)Appender的方式,但是却出错了:Unable to invoke factory method in class class org.apache....

2019-12-27 19:57:40 10751 3

原创 循环遍历数组(集合)的几种方式的效率测试

前言:本文旨在对比一下循环遍历数组的三种方式的效率问题!(本文数据仅供参考)如果你比较着急,或者不想看代码,直接到最后,但是建议你简单浏览代码!三种方式,均为最常见的:1.普通for循环遍历2.增强for循环遍历3.迭代器方法遍历废话不多说,先看测试代码: public static void main(String[] args) {...

2019-12-04 14:37:40 1836 1

原创 Protobuf的研究理解

引导性问题抛出:在java语言的API中有关于网络编程的socket封装套接字,有过java网络编程的都会了解,java语言有自己的网络数据传输方法,即内置的Serializable序列化接口,实现类的序列化,然后使用API中io下的对象流即可进行数据传输。而该方法的逻辑本质上就是一种简单的网路协议,所谓协议就是一种规则规范,让通讯双方能够知道对方传输来的信息应该如何解读。而与之相似的还有...

2019-11-20 17:44:49 1055

原创 win10开机无法连接SENS服务

本文笔者亲测,解决一下win10系统下,开机提示无法连接到SENS服务的解决方法。1.使用(win+X)打开超级菜单,点击命令提示符(管理员)。注意一定要使用管理员打开。2.在管理员命令提示符中直接输入:netsh winsock reset catalog3.完成命令后,提示成功重置,此时重启计算机即可。...

2019-10-14 12:57:44 482

原创 根据JDK源码理解hashmap的并发死循环

本文章,不是用来介绍所谓的hashmap的实现原理或者使用方法,而是就几个常见问题进行一下个人详细理解的阐述!有关hashmap的几个问题:1.hashmap的容量为什么是2的幂次方?2.hashmap在插入元素的时候,采用的是头插还是尾插?3.hashmap的默认容量是多少?什么时候扩容?4.为什么hashmap在多线程情况下是不安全的?(有可能产生死循环) 其在什么情况下会...

2019-09-28 18:04:56 360

原创 单例模式的几种简单实现以及理解

学过设计模式的都知道,在创建型模式中,有个单例模式,很简单的设计模式,但是,这里面也设计了比较多的小的细节问题,此处根据代码,简单的讨论一下个人的理解。什么是单例模式?难道我学习单例模式之前,就必须去学习所谓的设计模式吗?哈哈,我就不学可以吗?作者负责的告诉你,你即使根本不知道什么是设计模式,也可以很快的精通单例模式,哈哈,开个玩笑,活跃一下气氛!所谓的单例模式,顾名思义,其本质就...

2019-09-20 23:48:23 200

原创 Synchronized原理以及锁升级

我相信,任何关于Java语言的初学者,认知者,熟练者,大牛者,都知道java语言关于其多线程并发同步的关键字,我们今天的主角synchronized。我们也习惯于把synchronized理解为重量级锁(哪怕你自己当时可能都不知道什么是重量级锁,哈哈)。但是,转折点出现了,JAVA SE 1.6对synchronized进行了各种优化,本文章也是基于此,来理解一下关于synchronized的锁优...

2019-09-18 23:14:24 513

原创 MySQL的存储引擎

作者通过个人的学习过程和理解,感觉出,单一的去理解MySQL的存储引擎的概念或者理论是毫无意义的,本文章是引导性的一点一点引出存储引擎的理解,所以或许你最后还是没有理解存储引擎,但是你可能学到了一种学习方法。首先,了解这样一个事实:MySQL最重要,最与众不同的特性就是他的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离。(参考《高性能MySQL》一书)那这句话...

2019-09-18 17:23:41 178

原创 数据库设计——三范式学习理解

什么是范式?数据库设计中,需要遵循一定的规则才能避免数据的冗余,这些规则实际上限制的是表与表、表与属性之间的关系。这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。1.第一范式(1NF)第一范式是指数据表中的每个字段必须是不可拆分的最小单元,也就是确保每一列的原子性。举个例子,某省的投档线公布表:院校代码 科类 院校名称 投档分...

2019-09-09 18:06:15 213

原创 JAVA可重入锁ReentrantLock及其公平性

重入锁ReentrantLock顾名思义,就是支持重复进入的锁,它表示该所能够支持一个线程对资源的重复加锁。而除此之外,该所还支持了获取锁时的公平和非公平性的选择。注意,ReentrantLock是一个独占锁。重入性分析及实现分析这里对比一下synchronized:要知道,synchronized也是支持可重入的,只不过是隐式的,例如,一个synchronized关键字修饰的递归...

2019-09-02 12:19:03 284

原创 队列同步器AQS的相关学习理解

本文章主要说明队列同步器AbstractQueuSynchronized的使用,以及对其主要方法的简单分析。队列同步器(以下简称AQS)队列同步器,是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量来表示同步状态,通过内置的FIFO队列来完成状态抢占线程的排队工作。同步状态的表示和操作很明显,表示同步状态的这个量为int类型,且该变量是volatile修饰的,保...

2019-09-01 21:43:25 179

原创 根据JDK深入详细学习理解JAVA线程池

笔者,之所以写这篇博客,是因为,很多博客或者书籍,在介绍线程池相关内容的时候,太理论化,直接上结论,并不能正确的表述出来所说的每一个结论,是为什么,怎么理解。所以在此记录一下自己的学习过程,大家共勉!提前说明,本文文章内容有些深入,繁杂,显得自然就有些混乱,所以,请静下心来,慢慢理解!首先,进行这样一个思考?线程池,是什么?作用是什么?(为什么我们需要使用线程池?)这个问题,相信很...

2019-09-01 15:38:37 272

原创 根据JDK源码理解学习ThreadLocal

个人查看了很多书籍以及博科介绍,发现对于该类的介绍都比较笼统抽象。所以在此整理个人的学习理解!问题引入:为什么要用ThreadLocal,什么是ThreadLocal?我们考虑这样一个问题:现在有两个线程,这两个线程都要访问一个变量,那么为了解决多线程并发下的同步问题,就要对这个变量进行同步处理。但是,我们要求访问的这个变量,不要求同步,也就是说,多线程访问一个变量的时候,怎么做到每一...

2019-08-30 22:28:21 140

原创 JAVA中对象的序列化Serializable

1.什么是java对象的序列化?Serialization(序列化)是一种将对象以一连串的字节描述的过程;与之对应,反序列化是一种将这些字节重建成一个对象的过程。2.什么时候需要用到序列化? Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求...

2019-08-30 17:35:47 407

原创 Java实现生产者消费者模式--解耦(缓冲区)

在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序整体处理数据的速度。问题的产生:在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产...

2019-08-30 15:00:12 992

原创 JUC中几个常见的并发工具类详解

在JDK的并发包里提供了几个非常有用的并发工具类。其中CountDownLatch,CyclicBarrier和Semaphore工具类提供了一种并发控制的手段。而Exchanger工具类则提供了在线程间进行交换数据的一种手段。1.等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。定义抽象难理解,直接上测试代码!...

2019-08-30 13:39:02 1846

原创 详解Java中finally代码块与return执行顺序的关系

提出问题:我们都知道这样一句话,java异常处理的try_catch_finally逻辑中的finally是一定会被执行的,并且即使该逻辑中出现了return语句,那么finally仍旧是要在return返回之前执行的。其实,上述说法,并没有逻辑错误,但是,其含义表达很笼统,这里就详细探究一下这个问题。1.finally真的一定会被执行吗?问题的答案,很简单,不一定。(这可能颠覆了...

2019-08-25 18:48:05 779

转载 在浏览器地址栏输入URL,按下回车后内部处理过程

这是一道面试会经常问的问题,平时虽然很常见的操作,但是探究其底层原理,可能并不是一件简单的事情,于是我从各处搜罗整理下全过程,在这里做分享。第一步:浏览器输入域名例如输入:www.csdn.net/第二步:浏览器查找域名的IP地址(DNS解析)浏览器会把输入的域名解析成对应的IP,其过程如下:1.查找浏览器缓存:因为浏览器一般会缓存DNS记录一段时间,不同浏览器的时间可能不...

2019-08-24 23:34:50 1554

原创 Java中抽象类和接口区别详细总结,附JDK1.8的新特性

抽象类:使用abstract修饰,使用时,子类用extends继承!接口:使用interface修饰,使用时,具体实现类用implements实现!按照类中所有元素,层次的区分两者:1.构造函数:抽象类可以有构造函数,但,即使如此,也不能被实例化(无论其内部是否有抽象方法,都不能实例化)!接口没有构造函数,不能实例化!2.成员变量:(1)抽象类可以有普通成员变量,接口不...

2019-08-24 21:05:28 2468

原创 java线程不建议使用过期的suspend,resume,stop方法的原因

首先,suspend,resume,stop对应线程的暂停,恢复,和停止操作!不建议使用的原因主要有:以suspend为例,在调用后,线程不会释放已经占有的资源(比如锁),而是占有着资源进入睡眠状态,这样就容易引起死锁等不安全问题。同样的,stop方法在终结一个线程的时候不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,因此会导致程序可能工作在不确定状态下!正因...

2019-08-08 21:53:06 603

原创 理解java线程交互的中断操作--interrupt

通常我们会有这样的需求,即停止一个线程。在java的api中有stop、suspend等方法可以达到目的,但由于这些方法在使用上存在不安全性,会带来不好的副作用,不建议被使用。在本文中,将讨论中断在java中的理解和使用。借助《java并发编程的艺术》艺术中的定义:中断可以理解为线程的一个标识位属性,他表示一个运行中的线程是否被其他线程进行了中断操作。中断好比其他线程对该线程打了个招呼,其...

2019-08-08 21:45:50 213

原创 谈谈进程和线程的联系和区别

(1)进程进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间,至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。(2)线程线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。(3)联系线程是进程的一部分,一个线程只能属于一个进程,而一个进程可...

2019-08-07 17:21:47 109

转载 深度剖析GET和POST两种基本请求方法的区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻...

2019-07-31 20:08:56 136

原创 详细理解TCP的三次握手以及四次挥手过程,以及常见问题的思考

首先,我们通过一个图解,来形象表述一下,tcp连接过程的三次握手:三次握手图解1.TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;2.TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文(一个特殊的TCP报文段,该报文段中不包含应用层数据,但是在报文段的首部中的一个标志位(即SYN比特)被置...

2019-07-31 19:45:23 621

转载 http状态码301和302详解及区别——辛酸的探索之路

一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解。这里记录下,希望能有新的认识。大家也共勉。官方的比较简洁的说明: 301 redirect: 301 代表永久性转移(Permanently Moved) 302 redirect: 302 代表暂时性转移(Temporarily Moved )...

2019-07-31 17:26:06 242

空空如也

空空如也

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

TA关注的人

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