WHH

MY BLOG

现有一个多边形,和一个点,需要判断点是否在多边形内。
几种情况:

  • 点在边上
  • 点在多边形顶点上
  • 点在多边形内

方法通过射线法,从点发出一条射线,如果穿过多边形,偶数个交点表示在多边形外;奇数个交点在多边形内。
特殊情况:

  • 点的射线和多边形边重合
  • 点的射线刚刚好经过多边形的点
    阅读全文 »

Java代码中可以通过Unicode注释后隐藏部分实际代码

1
2
3
4
@Test
public void demo(){
// \u000d System.out.println("Hello");
}

上述代码会输出Hello,因为前面unicode会转义为换行,后面的代码正常执行。后面代码也可以全部转义为unicode,用于隐藏,如下。

1
2
3
4
5
@Test
public void demo(){
// \u000d \u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0022\u0048\u0065\u006c\u006c\u006f\u0022\u0029\u003b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0022\u0048\u0065\u006c\u006c\u006f\u0022\u0029\u003b
}

上述会输出2次Hello

之前看slf4j-api源码时,2.0版本中切换不同的日志,采用的就是SPI。通过定义接口,不同的日志框架实现该接口,对于使用方而言,通过JDK提供的方法找到实现的类并构建对象。接口不直接实现,又其他第三方实现该接口,支持热插拔。

slf4j-api 1.*版本并不是用的这种方法,是通过自定义类org.slf4j.impl.StaticLoggerBinder,实现使用不同的日志。

阅读全文 »

在Java中Queue类主要存在两个子接口、一个抽象子类AbstractQueue。
AbstractQueue继承AbstractCollection和实现接口Queue,不允许存在null节点,存入和删除节点是如果为null会直接报错。

阅读全文 »

定义

一般情况下,队列为一种先进先出的线性表。队列只允许在尾端插入数据,前端删除数据。也存在双端队列,可以在头部和尾部进行插入删除数据。

阅读全文 »

使用IDEA开发SpringBoot项目,有时候在导入项目后,写配置文件无提示。
可以正常提示的application.properties为一个绿叶图标,不能正常提示的图标为普通properties图标。

阅读全文 »

Servelt 3.0在2009年已经随着JavaEE 6推出。主要增加了异步处理、注解支持、模块化处理

异步支持

在之前Servelt在接收到请求后需要处理完毕后再做返回,线程一直在阻塞状态,现在可以接收数据后交由其他线程处理,线程接收线程本身返回容器。如果聊天中等待消息。
WebServlet设置asyncSupported为true即可(默认为false)

阅读全文 »

BeanFactoryPostProcessor

实现改接口,可以在Bean创建前,修改Bean定义的对象(元数据),也就是定义Bean的相关信息。但是需要注意的是,不可以在该实现里面触发Bean的实例化操作。可能会导致其他意想不到的问题。文档中有注释,如果需要与构建的Bean有交互的话使用BeanPostProcessor

BeanPostProcessor

该接口有两个方法。一个为执行Bean的init方法之前,一个是之后,在该过程中可以对该Bean进行修改操作。

阅读全文 »

BeanFactory

是Spring IOC容器定义的跟接口,用于获取Bean。

FactoryBean

是一个Bean,只不过是一个工厂Bean,在BeanFactory需要获取Bean的时候,通过FactoryBean来生成对象返回,如果是单例,缓存生成的对象。如果需要获取的是FactoryBean而不是FactoryBean生成Bean时,需要在Bean的名称上面加一个**&**

阅读全文 »

前言:本来项目中使用的redis采用的是集群模式,之后改为了哨兵模式。
今天在缓存平台上查看缓存,发现命中率非常低,缓存中key非常少,之前集群模式应该有即使上百万的key,现在就几百。几番排查后发现在集群模式下使用了mset可以正常批量写入数据,之后通过mexpire批量设置失效时间。改为哨兵模式后,mset无法使用。
业务中如果缓存没命中会直接查询数据库,所有在测试时并未发现什么问题。

确实哨兵模式下,也有对应的mset,但是该模式下没有批量设置失效时间,只能使用lua脚本对数据进行操作。

阅读全文 »
0%