计算几何-扫描线算法 计算几何中,扫描线算法(Sweep Line Algorithm)或平面扫描算法(Plane Sweep Algorithm)是一种算法模式,虚拟扫描线或扫描面来解决欧几里德空间中的各种问题,一般被用来解决图形面积,周长等问题,是计算几何中的关键技术之一。这种算法背后的想法是想象一条线(通常是一条垂直线)在平面上扫过或移动,在某些点停止。几何操作仅限于几何对象,无论何时停止,它们都与扫描线相交或紧邻扫描线,并且一旦线穿过所有对象,就可以获得完整的解。
ArrayDeque阅读记录 1.对Queue接口进行实现2.底层的数据结构还是数组,同时还是双向的,有前后指针3.不是线程安全的4.可以当作队列和栈来使用,选择使用队列时,ArrayDeque推荐首选5.不可以添加null数据,会抛异常。
理清线程、进程、任务的各自区别 线程是进程中可独立执行的最小单位,一个进程可以包含多个线程,在一个进程中,线程共享这进程中的资源,正是因为这样,可能存在着临界资源的竞争,从而有着后边所说的线程安全问题。是程序的运行实例,打开任务管理器,看到的那些进程。进程是程序向操作系统申请资源的基本单位。线程要完成的计算被称为任务。
FlatBuffers 使用编译器 可能刚接触的人会思考为啥要使用编译器:一般跨平台、跨语言的都有一套固定的流程,大致可分为:撰写IDL文件 -> 使用对应语言的编译器,编译成对应的语言 -> 序列化 ->持久化 -> 反序列化这里就对应着这个阶段:使用编译器根据自己语言的选择,选择对应的编译器即可,有些语言需要注意版本问题,如我当前用的是 Java,需要接入第三方Jar,如:这里用的是22.10.26版本,所以用的编译器需要在下载对应版本的编译器。
FaltBuffers 初识 使用简单方便 ,仅仅需要自动生成的少量代码和一个单一的头文件依赖,很容易集成到现有系统中,生成的 C++ 代码提供了简单的访问和构造接口,可以兼容 Json 等其他格式的解析。解码速度极快,将序列化数据存储在缓存中,这些数据既可以写出至文件中,又可以通过网络原样传输,也可直接读取而没有任何解析开销,访问数据时的唯一内存需求就是缓冲区,不需要额外的内存分配。因工作之余,需要替换替换底层序列化协议,最终考虑,选择了 FlatBuffers。替换过程中,也对这协议有了一些理解,想着记录下,那就开始吧。
StringBuilder重用小技巧 这里实现了对StringBuilder的重用,只需要重置count指针。很nice的想法,记录下,同时通过Threadlocal+StringBuilder的使用,提高了可用性。今天无意看到了 BigDecimal 代码里对字符串的处理,发现个有趣的事。
ArrayList 源码阅读记录 数组型链表,底层数据结构是数组RandomAccess 接口的实现类,表明这是随机访问类型,在有index的情况下,访问的复杂度为O(1),插入和删除复杂度比较高O(n)不是线程安全的,效率肯定比线程安全的高,单线程情况下使用源码分析没有特别说明,都是基于JDK1.8的源码分析1、一些重要的常量和变量//默认的初始化容量为10//空的数组对象 ,用于空实例的共享空数组实例//和上面差不多,只是如果使用默认的构造方法,那么久使用这个数组对象。
浅拷贝和深拷贝 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。浅拷贝只是复制了主对象的引用,它两的引用同时指向同一块内存,所以只要修改了其中一个对象,另外一个对象也会受到影响。但这里需要注意的是基础类型的浅拷贝也就是直接拷贝了一块新的内存了,和主对象是相互独立的。克隆对象,在克隆之后的对象上修改信息,同时也会修改到被克隆的对象了。简而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。
SPI 服务发现机制不生效 我们的 SPI 服务理论是应该通过webapp 这加载器去加载的,但是因为使用了ForkJoinPool ,这时候通过线程上下文加载器,拿到的加载器就是一个Bootstrap ,而这玩意是无法去加载SPI的。这方法来设置,如果创建线程的时候没设置,那么它会从父线程中继承一个,如果在应用程序的全局范围内都没有设置过的话,那么这个类加载器默认就是应用程序类加载器。SPI 服务发现机制还是走的类加载器去加载这些服务的,所以,是可以设置上下文线程类加载器来处理。
面试-有利网-校招 8、寄存器,cpu的组成,总线是啥, -3 的16进制是啥,负数如何转化为补码。15、arrayList是什么,他的扩容机制,在上面时候发生触发扩容机制。16、varchar(20)和char(20)有啥区别,各占多大的内存。13、给一个树写出的他的前序、中序、后序遍历。14、单链表的随机删除,双链表的随机删除。6、内存泄露和内存溢出的区别。12、set,hset的区别。17、索引一般建立在哪些地方。10、redis常用的命令。11、redis数据结构。2、接口和抽象类的区别。7、重载和重写的区别。
SPI-服务发现机制 1、SPI是啥全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。:获取类的实现本质上是通过遍历完成的,所以类的初始化是全部初始化的,会浪费一些资源。3、怎么用。