java随笔

  • Error和Exception的区别

  • sleep和await

  • servlet的生命周期

  • CountDownLatch:这个类能够使一个线程等待其他线程完成各自的工作后再执行。每调用countDown()通知CountDownLatch对象已经执行完任务,count值减1直到等于0,然后主线程就能通过await()方法,恢复执行自己的任务。(http://www.importnew.com/15731.html)

  • ThreadLocal:(理解:字面上线程本地独立的变量;容易出现内存泄露现象,键弱引用 值是强引用,使用完后调用remove方法)ThreadLocal 适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景。(http://www.jasongj.com/java/threadlocal/)

Java内存管理

  • volatile关键字:变量被修饰后满足可见性(立即写入主存,其他线程可见),禁止指令重排序。虽然禁止重排但是不能一定保证有序性。不能保证原子性。应用场景:状态标记量、double check
  • 引用: 理解Java的强引用、软引用、弱引用和虚引用(https://juejin.im/post/5b82c02df265da436152f5ad)

  • 多种文件命名(fileNamePattern):filename1_<tid>,filename2_<timestamp>,用String.replaceAll("<timestamp>",timestamp)
  • robot.txt : 可以配置网络爬虫的内容 http://www.robotstxt.org/wc/exclusion.html#robotstxt
  • Thread.activeCount() 活跃的线程数
  • //NOPMD 可以忽略PMD警告

注解

  • @Inherited : 该注解表示的是使用含有该元注解去标注的类, 在其继承的子类中也是自动继承此注解.
  • 元注解@Retention(RetentionPolicy.SOURCE) : @Override 注解的生命周期
    RetentionPolicy.RUNTIME: @Deprecated在运行时可以被JVM读取到
  • @Target(ElementType.METHOD) 修饰的注解表示该注解只能用来修饰在方法上。

  • String authentication = Credentials.basic(“wccUser”,“v2Xw8rBYWdWx”);
  • InetAddress.getByName(url.getHost()).isReachable(1000);
  • 调用外部api需要安装证书,如果不安装需要写忽略证书认证方法

PaaS platform as a server 平台即服务

内部类中不能声明静态变量:常量除外

static类型的属性和方法,在类加载的时候就会存在于内存中。
要想使用某个类的static属性和方法,那么这个类必须要加载到虚拟机- 中。
非静态内部类并不随外部类一起加载,只有在实例化外部类之后才会加载。
静态变量是要占用内存的,在编译时只要是定义为静态变量了,系统就会自动分配内存给他,而内部类是在宿主类编译完编译的

public class InnerClassDemo {
class InnerClass{
//1、这样是可以的,这样编译器会在编译的时候就将这种语句变成常量值
//(也就是说可以定义所有的static final + 基本数据类型)
static final int i = 50;
//2、这样不可以,虽然也为static final 但是说到底还是个变量对象,所以不可以这样
static final String str = new String("");
//3、与上相同
static InnerClass innerClass = new InnerClass();
}
}

[拖曳以移動]

单例模式,构造函数私有化 类申明final

//final类表示不能被继承
//私有的构造函数仅被调用了一次,用来实例化公有的静态final域Sington.INSTANCE;
//由于缺少公有的或者受保护的构造函数,所以保证了Sington的全局唯一性。
//一旦Sington类被实例化之后,只有一个Sington实例存在
public final class Sington {
public static final Sington INSTANCE = new Sington();//只被实例化一次
private Sington() { }//构造函数私有化 保证此类外不能再被实例,保证单例,只能在本类中new
public void leaveTheBuilding() {
System.out.println(“This is singleton.”);
}
}

临界区:多个线程使用一个资源,这个资源进入临界区保护,只能一个线程访问,其他线程等待(阻塞),非阻塞允许多线程进入临界区

并发与并发:实现虚线表示不同任务

protobuffer与json:1都是跨语言的 2protobuffer自带编译器,可以编译成各种语言,可以直接使用,json是基于编写代码上的跨语言 3高性能protobuffer在大数据量时占用空间比json小的多,json带格式以字符存在

IDL(接口定义语言)

RPC(Remote Procedure Call Protocol)远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。1跨语言(grpc)2支持服务治理,主要的精力放在服务发现、路由、容错处理Dubbo。Dubbo、Thrift、GRPC、Hetty、rest api

java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

class User implements Serializable {
private static final long serialVersionUID = 8294180014912103005L;
private String username;
private transient String passwd;
。。。

RxJava-Subject:https://www.jianshu.com/p/99bd603881bf

AsyncSubject:Observer会接收AsyncSubject的onComplete()之前的最后一个数据

BehaviorSubject:Observer会接收到BehaviorSubject被订阅之前的最后一个数据,再接收订阅之后发射过来的数据。如果BehaviorSubject被订阅之前没有发送任何数据,则会发送一个默认数据。

ReplaySubject:ReplaySubject会发射所有来自原始Observable的数据给观察者,无论它们是何时订阅的

PublishSubject:Observer只接收PublishSubject被订阅之后发送的数据。

读取resources下的文件:IOUtils.toString(ResourceUtils.getResourceAsInputStream();
org.apache.commons.io.IOUtils

equals hashCode 重写 why 31?

Guice:

@annotatedWith(Output.class); @Interface Output{ }
final, Long与long
Provider

@jsonproperty:json序列化

@JsonProperty(value = “real_name”)
private String realName;

@SerializedName:Gson解析json成对象时要求json和对象的属性名称一样,不一样时可以用此注解,eg:

@SerializedName("name")
private String userName;

mokito.mock():1验证方法调用 2指定mock对象的某些方法的行为

mokito.spy():spy与mock的唯一区别就是默认行为不一样:spy对象的方法默认调用真实的逻辑,mock对象的方法默认什么都不做,或直接返回默认值。

TF-IDF(词频-逆文件频率):应用一:关键字提取

SiteMap

Callable与Runnable

rxBus

RxJava:reactiveX (https://blog.csdn.net/shangmingchao/article/details/72247730)

产生stream的通常叫作被观察者(Observable)/生产者,而监听、处理stream的通常叫做观察者(Observer)/消费者,两者的关联通常叫作订阅(Subscribe):Observable.subscribe(Observer)

1创建。操作符:create/just/defer/from…创建Observable;intervald间隔定时器;range创建范围的整型对象;repeat…更多的详见官方wiki

2Transforming转换。Map/FlatMap

token:的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码

System.getProperty()获取系统变量

-----@postconstruct @preDestroy servlet执行流程图
在这里插入图片描述
--------测试:mockito桩模块
在这里插入图片描述
------google guice:

https://blog.csdn.net/u011870547/article/details/52622097

@ImplementedBy(SimpleAdd.class)//指定接口的默认实现类
interface Add{
public int add(int a, int b);
}
@Inject 直接将实例注入到客户端的代码中
@ProvidedBy 为一些接口定制化对象创建的流程
@singleton 单例

------public static list aslist(T…a)

第一个表示是泛型方法,第二个表示返回值是list类型,而这个list有泛型,只能存t类型的数据

----Class.cast() 将一个对象转换为类或者接口 A.class.cast(b1);//将A对象转换成B A->B

class A {
public static void show() {
System.out.println(“Class A show() function”);
}
}

class B extends A {
public static void show() {
System.out.println(“Class B show() function”);
}
}

public class ClassDemo {

public static void main(String[] args) {

 ClassDemo cls = new ClassDemo();
 Class c = cls.getClass();      
 System.out.println(c);  

 Object obj = new A();        
 B b1 = new B();
 b1.show();
    
 // casts object
 Object a = A.class.cast(b1);//将A对象转换成B A->B

 System.out.println(obj.getClass());
 System.out.println(b1.getClass());
 System.out.println(a.getClass());               

}
}
jieguo:
A {
public static void show() {
System.out.println(“Class A show() function”);
}
}

class B extends A {
public static void show() {
System.out.println(“Class B show() function”);
}
}

public class ClassDemo {

public static void main(String[] args) {

 ClassDemo cls = new ClassDemo();
 Class c = cls.getClass();      
 System.out.println(c);  

 Object obj = new A();        
 B b1 = new B();
 b1.show();
    
 // casts object
 Object a = A.class.cast(b1);//将A对象转换成B A->B

 System.out.println(obj.getClass());
 System.out.println(b1.getClass());
 System.out.println(a.getClass());               

}
}
结果:

class ClassDemo
Class B show() function
class A
class B
class B
ClassDemo
Class B show() function
class A
class B
class B

idea Junit单元测试,可以用idea中的Coverage,单个测试,整个包测试,最后用gradle test运行Jenkins;

http学习:https://www.cnblogs.com/aaron911/p/7832055.html

每隔5秒重定向

response.setHeader(“refresh”, “5;url=/response/response/login.html”);

http协议是无状态的,并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.

1XX 提示信息 - 表示请求已被成功接收,继续处理

2XX 成功 - 表示请求已被成功接收,理解,接受

3XX 重定向 - 要完成请求必须进行更进一步的处理

4XX 客户端错误 - 请求有语法错误或请求无法实现

5XX 服务器端错误 - 服务器未能实现合法的请求

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值