JAVA的一点记录

====================================================================

&=:两个二进制的对应位都为1时,结果为1,否则结果等于0;   与: 同1为1
    int a = 5;     // 0000 0101
    int b = 3;     // 0000 0011
    a &= b;     // 0000 0001     ---1

|=:两个二进制对应位都为0时,结果等于0,否则结果等于1;   或: 有1为1
    int a = 5;     // 0000 0101
    int b = 3;     // 0000 0011
    a |= b;     // 0000 0111     ---7

^=:两个二进制的对应位相同,结果为0,否则结果为1。        非: 相同为0/不同为1
    int a = 5;     // 0000 0101
    int b = 3;     // 0000 0011
    a ^= b;     // 0000 0110     ---6
====================================================================

====================================================================

正数的原码,反码,补码都相同是因为:正数的加法本来就是正常的(正数原码做加法是正常的)
反码的出现:为了解决负数原码做减法(即加法)的问题 
补码的出现:为了解决了0的符号问题以及0的两个编码问题
====================================================================

====================================================================

kafka: 
一个Topic包含一个或多个Partition,建Topic的时候可以手动指定Partition个数,个数与服务器个数相当, 每条消息属于且仅属于一个Topic
每个Partition只会在一个Broker上,物理上每个Partition对应的是一个文件夹
Partition包含多个Segment,每个Segment对应一个文件,Segment可以手动指定大小,当Segment达到阈值时,将不再写数据,每个Segment都是大小相同的
Segment由多个不可变的记录组成,记录只会被append到Segment中,不会被单独删除或者修改,每个Segment中的Message数量不一定相等

一个消息-----对应一个topic
一个topic-----对应多个Partiton
一个Partition-----包含多个Segment
一个Segment-----包含多个message
每个message包含三个属性:offset,MessageSize,data

kafka采取的是:消费者主动向broker拉取的方式
====================================================================

====================================================================
关键字高亮显示:    cat log.log | grep "终端上传搜网结果" --color=auto 
查找文件:         find / -name docker.service -type f
查看内存情况:     free -m
redis连接:         redis-cli -c -h 10.0.0.1 -p 9374
查看压缩文件内容: zcat log-2021-04-06.*|grep '1680006000'
查看压缩文件内容: zgrep "000000" XXX.log.gz | grep "收到终端请求" | grep "abc"

查看redis连接数:   netstat -an|grep 6379|wc -l 
创建链接文件:      ln

ping用来检查网络是否通畅或者网络连接速度的命令 
telnet是用来探测指定ip是否开放指定端口

查看zk节点信息:   ls /brokers/ids
查看文件头20行:   head -n 20 log.log
实时日志查看:     tail -100f log.log | grep '关键字' -A 10

查看连接数:       netstat -apn | grep -i "2001" | grep -vi listen | wc -l

===================================================================
git reset --mixed    撤销已add还未push的所有提交
git config --global core.autocrlf false   忽略换行符引起的修改
===================================================================

-------------------------------------------------------------------------------------------------------------------

java内存占用情况
jstat -gc 3205
jstat -gcutil 3205
jmap -heap 3205
=====================================================================

====================================================================

抽象类可以有构造器,除了不能被实例化之外,他和普通java类没有任何区别. 
抽象方法只有声明,没有实现abstract void xxx();
                       
局部变量: 定义在方法中,随着方法的调用被创建,随着方法的调用结束被销毁,存在栈中  ---->属于方法本身
成员变量: 定义在类中,随着类的实例化被创建,随着类的实例化对象被销毁而销毁,存在堆中  ----->属于实例化对象本身
全局变量(静态成员变量): 定义在类中,随着类的加载而被创建,随着类的销毁而被销毁,静态变量数据存储在方法区(共享数据)的静态区,所以也叫对象的共享数据。. ----->属于类本身,可被该类的所有实例化对象所共有(在服务启动时被类加载器所加载,服务停止前销毁)

静态代码块: 一个类加载的过程包括了加载、验证、准备、解析、初始化五个阶段,当类被第一次使用时(可能是调用static属性(非final)和方法,或者创建其对象)会初始化,                        

====================================================================
1.父类静态变量/静态代码块(按编写顺序) --> 2.子类静态变量/静态代码块(按编写顺序) -->3.父类成员变量-->4.父类构造代码块-->5.父类构造方法 -->6.子类成员变量-->7.子类构造代码块-->8.子类构造方法

父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块

父类--成员变量
父类--初始化块
父类--构造器

子类--成员变量
子类--初始化块
子类--构造器

执行父类的静态代码块,并初始化父类静态成员变量
执行子类的静态代码块,并初始化子类静态成员变量
执行父类的构造代码块,执行父类的构造函数,并初始化父类普通成员变量
执行子类的构造代码块, 执行子类的构造函数,并初始化子类普通成员变量

====================================================================
类的加载过程: 加载,链接(验证,准备,解析),初始化
加载:(将.class文件加载到内存中) 通过一个类的全限定名来获取定义此类的二进制字节流,将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构.
    将类的class文件读入内存,并为之创建一个java.lang.Class对象,作为方法区这个类的各种数据的访问入口
验证:(检查载入的class文件数据的正确性) 检验被加载的类是否有正确的内部结构,并和其他类协调一致;
准备:(给类的静态变量分配存储空间) 准备阶段则负责为类的静态属性分配内存,并设置默认初始值;
解析:(将符号引用转成直接引用) 将类的二进制数据中的符号引用替换成直接引用(符号引用是用一组符号描述所引用的目标;直接引用是指向目标的指针)
初始化:(对静态变量,静态代码块执行初始化工作) 
    假如这个类还没有被加载和连接,程序先加载并连接该类;
    假如该类的直接父类还没有被初始化,则先初始化其直接父类;
    假如类中有初始化语句,则系统依次执行这些初始化语句
    
====================================================================

====================================================================
CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。
CAS 有效地说明了"我认为位置 V 应该包含值 A;如果包含该值,则将 B 放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可"。

所有的Lambada的类型都是一个接口,而Lambada表达式本身("那段代码")就是一个接口的实现,这是理解Lambada的
一个关键所在,理解上可以这样认为:Lambada表达式就是产生一个实现接口中唯一的抽象方法的子实现类的对象

TPS(每秒处理事务数)

HGET key  field 
获取 对象 属性 (例如:获取User.name)
====================================================================

===================================================================
同一个类中调用另一个方法没有触发 Spring AOP:
    
如果在A类中通过@Autowired自动注入B类的对象,并在A类中调用B类的b()方法,则b()方法能够被AOP拦截到。若在B类的b()方法中,调用了B类的c()方法(调用内部方法),则对c()所配置的AOP拦截将会失效
因为aop是基于接口或者是基于类创建代理,而不是基于方法创建代理

满足 pointcut指定条件而不会执行切面逻辑的情况:    
1.被切面方法调用的内部方法
2.final 方法
3.private 方法
4.static 静态方法

aop要生效,则类需要注入到spring容器中,被spring容器托管
AOP的切面逻辑是通过目标类的代理类来执行的,如果发现AOP的切面逻辑没有执行,那么说明此切面逻辑未通过代理类来执行。
如果一个类实现了自定义接口,则在AOP过程中会使用jdk动态代理生成目标类的代理类,此时Spring容器中是代理类,且是自定义接口的子类,而不是目标类。
此类若被Spring托管,则此时Spring容器中是代理类,而不是目标类。可以在SpringBoot启动类上添加  @EnableAspectJAutoProxy(proxyTargetClass=true)  来指定使用CGLIB动态代理。    
===================================================================
任务被提交到线程池,会先判断当前线程数量是否小于corePoolSize,如果小于则创建线程来执行提交的任务,否则将任务放入workQueue队列,
如果workQueue满了,则判断当前线程数量是否小于maximumPoolSize,如果小于则创建线程执行任务,否则就会调用handler,以表示线程池拒绝接收任务。    

运行时注解APT    
callBack: 就是把一个接口的实现(每次new这个接口,然后重写接口中的方法)做为参数传递过去。其实可以这么理解:重写的这个方法其实就是调用了一个方法而已,让代码逻辑走到此处,callBack只是有点特殊,他是让代码逻辑走回到方法参数对象(此接口的实现)中的方法中(接口中方法的实现)去了。
        
===================================================================

===================================================================
1.所有可能被作为接口响应的实体类中,禁止添加与实体类属性相关的主动抛异常的方法,否则spring在反序列化时会出错
2.Arrays.asList 方法返回的List不能使用add方法(因为它返回的是它自己内部类定义的list),否则会抛出异常。
3.Http接口返回的实体类,如果实体类中定义的字段类型为包装类型,则该字段对应的get方法不能为基本类型(建议修改了数据类型后,重新生成set,get方法),否则如果该字段在返回时未set值会导致接口报错。
===================================================================

Luyten

=========================================================================

INTERSECT 运算符(intersect)(交集): INTERSECT 运算符通过组合只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 

UNION 运算符(union)(并集) : UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 

EXCEPT 运算符(except)(补集):EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。(TABLE1包含所有TABLE2,即:TABLE2是TABLE1的子集)

选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
    
所有的调优的目的都是为了用更小的硬件成本达到更高的吞吐    
    
======================================================================== 
spring解决循环依赖: 例如; A依赖B,B依赖A.
spring中有三级缓存,对象的创建分为实例化和初始化
A先实例化出来,在初始化A实例的B属性时发现没有B实例,则去实例化B,B实例化完成后为B初始化,在为B设置A属性时,发现已有A实例(虽然此时A未完成初始化,但是已经实例化,则将A的引用返回给B),则此时B已完成初始化.
在回到A,A获得了B的实例化对象设置给A的B属性后A完成了初始化。

=========================================================================

========================================================================
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行, 
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

正确方法可以是:
grep 'pattten1\|pattern2' files

当然还可以同时找更多的pattern,
grep 'pattten1\|pattern2\|pattern3' files

另外还有种写法:
grep -e 'pattern1' -e 'pattern2' -e 'pattern3' files

例子:
grep '635904200000\|90010000000' log.log
或者
cat log.log | grep '635904200000\|90010000000'
或者(-E 正则表达式查找)
cat log.log | grep -E '635904200000|90010000000'     
或者
cat log.log | egrep '635904200000|90010000000'

------------------------------------------------------------------------
grep name# 表示只查看name这个内容
grep -v name # 表示查看除了name之外的内容

组合使用:cat log.log | grep '635904200000\|90010000000' | grep -v '90010000000'

------------------------------------------------------------------------
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写

grep -C number pattern files :匹配的上下文分别显示[number]行。显示匹配搜索条件行及其前后各[number]行

grep -n files: 显示行数

grep -E pattern files : 正则表达式查找

grep -v name # 反向查找,表示查看除了name之外的内容

grep -w pattern files :精确匹配,只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’)。

------------------------------------------------------------------------

-A # 显示匹配结果之后的#行
-B # 显示匹配结果之前的#行
-C # 显示匹配结果前#行和后#行

sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。

========================================================================
dubbo服务超时时间有xml和注解两种方式进行实现配置超时功能。在配置范围上分为全部超时配置、接口类上超时配置、以及接口方法上超时配置。
同类型上的配置消费端优先提供着端,靠近原则方法配置优先于接口类全局配置优先级最低。所以dubbo的超时时间优先级为:
消费者Method>提供者method>消费者Reference>提供者Service>消费者全局配置provider>提供者全局配置consumer。

方法级优先,接口级次之,全局配置再次之。
如果级别一样,则消费方优先,提供方次之。

=========================================================================
抓包:
71:  tcpdump -i eth2 port 8001 -s0 -G 600 -Z root -w /home/dump/%Y%m%d_%H%M%S.cap &
141: tcpdump -i eth0 port 8001 -s0 -G 600 -Z root -w /home/dump/%Y%m%d_%H%M%S.cap &

停止抓包:
ps -ef | grep 'tcpdump'  ---找到pid

kill -9 pid

抓包时tcpdump进程有一个即可。
=========================================================================

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值