verysu 设计模式 设计模式 响应式编程 百度开发平台 codeforces leetcode usfca

导航

java新大陆

查找两个list的差org.apache.commons.collections4.CollectionUtils.disjunction
对集合进行差交并集运算org.apache.commons.collections4.SetUtils
结合交集并集包含等运算org.apache.commons.collections4.CollectionUtils


用户计时
org.apache.commons.lang.time.StopWatch

Joiner.on("&").withKeyValueSeparator("=").join(param); guawa功能

异步处理业务逻辑
Future<Integer> future1 =homeStatisticalService.ReportList(authkeys,reslutList);返回new AsyncResult<Integer>(1)

通过hash值对数据分表保存
表编号
formateNumber((Integer.MAX_VALUE & custid.hashCode()) % TradeTableCount);
formateNumber(num){
if (num < 10)
result = "00" + result;
else if (num < 100)
result = "0" + result;
}

直接读取springboot配置属性spring
import org.springframework.beans.factory.annotation.Value;
@Value("${runtask}")
private boolean runtask;

下载

fis = new FileInputStream(f);
out = response.getOutputStream();
// 3.设置让浏览器不进行缓存,不然会发现下载功能在opera和firefox里面好好的没问题,在IE下面就是不行,就是找不到文件
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "No-cache");
response.setDateHeader("Expires", -1);
// 4.设置Content-type字段
response.setContentType("blob");

// 5.设置http响应头,告诉浏览器以下载的方式处理我们的响应信息
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("GBK"),"ISO8859_1")); // 6.开始写文件
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
out.write(buf, 0, len);
}

threadlocal的实质

可以实现同一个变量在不同的线程有不同的副本。可以理解ThreadLoca是一串密钥(this),获取的时候是找到线程对应的房间(ThreadLocalMap),然后再用密钥(this)获取对应的值,因为不同的线程的房间不同,所以取出来的变量也可以不同。

不同的线程,同一个ThreadLocal对象,存取的时候首先取出当前线程的ThreadLocalMap,因为ThreadLocalMap不同,所以在ThreadLocalMap.getEntry(this)的时候虽然this相同但还是不同。
相同的线程,不同的ThreadLocal对象,取出来的ThreadLocalMap是一样的,但是ThreadLocalMap.getEntry(this)的时候this不同就不同

强引用

new了一个对象就是强引用

软引用SoftReference

JVM认为内存空间不足时,就回去试图回收软引用指向的对象。软引用可以与引用队列(ReferenceQueue)联合使用检查对象是否被回收

弱引用WeakReference

不管内存空间足不足都会回收这个对象,通过get()方法获取对象

虚引用PhantomReference

跟踪对象被垃圾回收的活动。软引用和弱引用的时候,我们可以显示地通过System.gc()来通知JVM进行垃圾回收

本来不会造成泄露,但是复制的线程,内存泄漏由entry引起,需要将Entry.value=null;,内部清理的时候(expungeStaleEntry方法)会这样做

通用注解

@ValidateDataPermission(validator = "nsrsbhValidator")
注解名称
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ValidateDataPermission {

String validator() default "";

}
校验逻辑
import com.holytax.core.authcommons.permission.data.DataPermissionValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.List;
@Slf4j
@Configuration
public class DataPermissionValidateConfig {
@Bean("nsrsbhValidator")
public DataPermissionValidator<String> dataPermissionValidator() {
return new DataPermissionValidator<>(dataAuthValidateBean -> {
List<String> roles = dataAuthValidateBean.getRoles();
if (roles == null || roles.size() == 0) {
return false;
}
if (roles.contains("superadmin")) {
dataAuthValidateBean.setCustomerCodeCondition(false);
dataAuthValidateBean.setPhoneNumCondition(false);
return true;
}

return false;
});
}
}
权限校验
import com.holytax.core.commons.exception.DataAuthException;

public class DataPermissionValidator<T> {

private DataPermissionExecutor<T> validator;

public DataPermissionValidator(DataPermissionExecutor<T> validator) {
this.validator = validator;
}

public void validate(DataValidateBean<T> validateBean) throws DataAuthException {
if (!validator.hasAuth(validateBean)) {
throw new DataAuthException("无该数据权限");
}
}
}
权限校验
public interface DataPermissionExecutor<T> {
boolean hasAuth(DataValidateBean<T> dataAuthValidateBean);
}
异步http请求方法实现
https://blog.csdn.net/weixin_32265569/article/details/108606783
https://blog.csdn.net/z69183787/article/details/53023355

字符串数组合并
com.google.common.base.Joiner.on(Constants.COMMA).join(headerTabStatic)

posted on 2020-01-19 15:25  泳之  阅读(264)  评论(0编辑  收藏  举报

我是谁? 回答错误