java杂记

1、实现接口或者继承父类,同样都是子父继承关系;

2、获取Tomcat 安装目录:System.getProperty("catalina.home"),log4j.appender.dailyFile.File =${catalina.home}

3、lombok:自动生成类的get、set、tostring方法等,可以加入eclipse安装路径,或者maven 插件形式。编译期使用,不需要加入war包。http://www.blogjava.net/fancydeepin/archive/2012/07/12/lombok.html

5、 post请求body大小 默认1M 可在tomcat里面配置,get默认1M左右
6、spring的编码是iso8859-1,@RequestMapping(produces="application/json;charset=UTF-8"解决ajax乱码
7、java线程安全问题 一般由多个线程同时去操作一个对象引起。每个线程会有自己独立的内存,当用到static或者全局变量时 常常发生问题,对于常量或者不可变对象,一般不会有线程安全问题如 private static final  DataFormat format =  new  SimpleDateFormat( "yyyy-MM-dd" );  使用这段代码要注意 通常会多线程不安全,因为 SimpleDateFormat内部有隐藏的可变状态,日历类,多个线程操作的时候会发生类似脏读现象。但是不加static 每次都会创建新的对象 造成资源浪费
8、       sw = new StringWriter();
            pw = new PrintWriter(sw);
            // 将出错的栈信息输出到printWriter中
            e.printStackTrace(pw);
            pw.flush();
            sw.flush();

sw.toString();记录到log中

9、List排序 java8:

       calcShoppingCartItemList.sort((x,y)->{   return x.getProductsPrice().compareTo(y.getProductsPrice());  });
        this.calcShoppingCartItemList= calcShoppingCartItemList.stream().sorted(Comparator.comparing(CalcShoppingCartItem::getProductsPrice,(x,y)->compare)).collect(Collectors.toList());

;thenComparing

10、switch() case: 一定要配合break使用或者return,不然会执行所有case;continue只能作用于循环,break都可以。

11、静态代码块,在spring中启动时会自动执行,在jvm中并不是加载就执行,而是调用class.forname(),方法且不修改里面默认的true属性。http://www.cnblogs.com/ivanfu/archive/2012/02/12/2347817.html

12、

Java中,字符都是使用UNICODE。,tomcat 的配置文件useBodyEncodingForURI=true.不设的化默认为iso-8859-1解码
iso-8859-1国际通用编码  不支持中文,utf-8支持多种语言,,,编码是字节和字符之间的对应表,将字符转换成计算机识别的二进制数字。
13、redis事务里面查询刚插入的值查不到,mysql可以。
spring-data-redis1.8.7版本的redisTemplate查询也要加事务,否则连接不释放。
spring是单例的,客户端的每次请求只有一个redistemplate对象和redis建立一个连接,不管请求多少次redis。
事务是和连接绑定的,如果链接提前没了,事务提交报错。
redistemplate的链接池默认链接数是8,默认超时时间无限大。
14Spring IOC三种注入方式(接口注入、setter注入、构造器注入))动态代理默认是cglib的不用实现接口,jdk的需要
new的对象@Autowired不了,必须是用注解交给spring托管的
@Transactional注解只能用在public方法上。如果是mysql,注意表要使用支持事务的引擎,比如innodb,如果是myisam,事务是不起作用的
同一个类中, 一个nan-transactional的方法去调用transactional的方法, 事务会失效,不同类可以。
15、int和integer:①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
  ②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
  java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存
  ③两个都是new出来的,都为false
  ④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
16、堆栈:堆先进先出,栈先进后出
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享
String str = new String("abc"); 
String str = "abc"; 
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。 
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",
如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。

17、spring的事物传播机制:默认嵌套事物,内部异常会和外部一起回滚,还有其他几种可配置https://blog.csdn.net/yuanlaishini2010/article/details/45792069

18、CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

19、HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的;并发情况下使用HashMap,可能会出现死循环,因为迁移的 transfer方法,线程2修改了原来的链表结构,而线程1却以原来的逻辑执行迁移,用ConcurrentHashMap可以避免。jdk8修复了这个问题

20、java类加载原理:https://mp.weixin.qq.com/s/0jVGEhzVwYmmaYRejJ4wOQ


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值