开发过程当中记录的一下小tips
1. oss -- open storage service 阿里云存储服务..2. swagger2 -- 2.6.0 --与springboot集成 偶尔会有问题,改成高版本.3. http --- 403 一般是请求的方式不对 (get请求,用成了post请求)4. ios -- 文件后缀ipa,android -- 文件后缀apk5. 修改jenkins端口: ...
1. oss -- open storage service 阿里云存储服务..
2. swagger2 -- 2.6.0 --与springboot集成 偶尔会有问题,改成高版本.
3. http --- 403 一般是请求的方式不对 (get请求,用成了post请求)
4. ios -- 文件后缀ipa,android -- 文件后缀apk
5. 修改jenkins端口:
Java -jar jenkins.war --httpPort=8081
6. 网络相关知识:
要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果-->网络号,如果网络号相同
7. 多线程相关:ThreadPoolTaskExecutor
Future:类型作用, Future是一个接口
1.判断任务是否执行完成
2.能够中断任务
3.能够获取任务执行结果
8. 系统设计就是在trade off中抉择 --- trade off理解---是“利”与“弊”的权衡
9. CSRF攻击:(跨站点请求伪造) (Cross-Site-Request-Forgery)
10. RBAC --- 访问控制
基于角色的访问控制 -- (Role-Based Access Control)
基于资源的访问控制 -- (Resource-Based Access Control)
11. WEB-INF目录下的JSP页面不能通过地址栏直接访问,
WEB-INF目录下的文件不能直接被访问主要是出于安全考虑
12. thymeleaf [taim li:f]--(百里香叶)
Thymeleaf 是一个跟 Velocity、FreeMarker类似的模板引擎,它可以完全替代JSP
13. tomcat -- 修改 java-jdk版本:
windows系统里,tomcat默认是使用系统变量JAVA_HOME的jdk版本,如果需要更换,可以在配置文件手动指定。
在bin\catalina.bat和bin\setclasspath.bat文件,记事本打开编辑,开头的空白处加上:
set JAVA_HOME=D:\jdk\jdk1.8.0_31
set JRE_HOME=D:\jdk\jdk1.8.0_31\jre
14.MD5加密单向的,不可逆的,登录密码比对,只能是先MD5加密,然后用两个加密后的密码进行比对。
linux --->存储数据的最小单位:数据块:一个数据块=512字节0.5k ...
15. 服务器操作系统:windows,linux,netware,unix
个人桌面操作系统:个人pc
嵌入式操作系统:Andriod ios....
16. java.net.UnknownHostException ---->域名解析异常
17. JSON.stringify() 方法将JavaScript值转换为JSON字符串0
JSON.parse() 方法解析一个JSON字符串,构造由字符串描述的JavaScript值或对象
18. jQuery中each类似于javascript的for循环
但不同于for循环的是在each里面不能使用break结束循环,
也不能使用continue来结束本次循环,想要实现类似的功能就只能用return,
break 用return false
continue 用return ture
19. 在JavaScript内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值。
20. javascript默认Unicode编码,统一起见所有字符都是2个字节,
在js里用length来求字符串长度的时候是指字符串的字符数
21. NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字,
NaN与其他数值进行比较的结果总是不相等的,包括它自身在内。
22. javascript中prototype允许我们在创建对象之后来改变对象或类的行为,
并且这些通过prototype属性添加的字段或方法所有对象实例是共享的
23. 将一个网址映射到一个特定的IP地址的过程就叫做域名解析。域名的解析工作由DNS服务器完成
24. RPC 是什么?
Remote Procedure Call Protocol ----远程过程调用协议
OOM是什么?
Out Of Memory 内存溢出
25. Hbase :-----------HBase – Hadoop Database
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
另一个不同的是HBase基于列的而不是基于行的模式。
HBase是Apache的Hadoop项目的子项目
26. JWT --- json web token
Session的状态是存储在服务器端,客户端只有session id;而Token的状态是存储在客户端
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名
27. windows -- 刷新Dns缓存命令:
ipconfig/flushdns
28. static 关键字的作用....
1.可以修饰成员变量,修饰成员方法,可以修饰内部类(静态内部类...)。
2.可以修饰代码块(静态代码块)。
3.静态导包。import static com..ClassName.*; 意思是本类中导入这个类里的所有静态方法,调用时直接 方法名即可... 而不用:ClassName.方法名()这样调用。
29. mybatis中 #与 $的区别.....
# 将传入的数据都当成一个字符串来对待,对传入的数据自动添加一对引号....(这里似乎不能是双引号?????)
$ 将传入的参数直接拼接在sql上,不做任何的处理... 容易导致sql注入.....order by 的时候 必须用 ${param}
30. sleep()和wait()的区别:
sleep()是线程类中的一个静态方法,让当前线程睡眠几秒,但并不会释放对象锁。
vait()是Object类中的方法,该方法让当前线程处于等待状态,并释放当前对象锁,该线程想要再次执行时,需要notify()方法唤醒
31. js中两个变量怎么比较大小?
js中var定义的变量默认是字符串类型,单纯的比较会出现错误,所以先转化成int类型 --- parseInt() 一下
32. 普通类不能包含抽象方法,抽象类可以包含抽象方法
抽象类不能直接实例化,普通类可以直接实例化
33. tomcat设置jvm内存 要在启动的时候,所以在启动脚本中配置
JAVA_OPTS='-Xms512m -Xmx1024m'表示初始化分配内存为512MB,可以使用的最大内存为1024MB。 --- windows catalian.bat catalian.sh
34. 路径问题: ./ 表示当前目录下,
这个当前的意思并非是包或类 所在的当前目录,而是相对整个项目来说的,
所以应该是 -- 当前类或包所在项目的根目录(即和src目录是同级目录)
35. 数学中质数的定义: 质数又称为素数,有无限多个,大于1的自然数,并且只能被1和其自身整除
36. sqlserver数据库问题:
首先 sqlyog-可视化工具只是针对 mysql的,所以数据库换成sqlserver,
可视化工具要换成navicat(即支持mysql,也支持sqlserver)
其次 sqlserver查询时只写表名会报无效的对象名,正确应该是 库名.所有者名.表名
因为数据库里的表是按角色管理的,不是所有角色都可以查询某个表
37. maven --->GAV 是什么? 即:groupId, atrifactId, version
parent标签 -- 相当于java中的继承
38. Java有一种特别的线程叫做守护线程。这种线程的优先级非常低,
通常在程序里没有其他线程运行时才会执行它
当守护线程是程序里唯一在运行的线程时,JVM会结束守护线程并终止程序
JAVA中最典型的这种类型线程的代表就是垃圾回收器
39. "新建"和"终止"这两种状态其实并不是线程的状态,而是java.lang.Thread对象的状态。
可以说,处于"新建"和"终止"状态的"线程"其实并不是线程,而只是代表着一个线程对象而已。
所以我们把"新建(NEW)"和"终止(TERMINATED)"两种状态去掉,那么线程的状态有:
就绪状态(可运行状态)
运行状态
阻塞状态
40. 垃圾收集的时候,怎么确定一个对象是垃圾对象?根搜索算法的基本思路就是通过一系列名为
”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可达的。
可作为 GC Roots(根集)的对象:
1.栈的栈帧中的局部变量所引用的对象
2.本地方法栈中的JNI所引用的对象
3.方法区的静态变量和常量所引用的对象
----方法区中存在垃圾回收:废弃的常量和无用的类
41. 注解-- @SpringBootApplication相当于@EnableAutoConfiguration、
@ComponentScan和@Configuration的合集
42. java中到底是否存在引用传递? -- 重点
-- 不存在,java方法传参的时候不存在引用传递,都是值传递。
43. Exception && RuntimeException层级关系
Throwable ---|Exception --| RuntimeException
|Error
以上都是类,没有接口
44. 缓存与缓冲的区别?
简单来说:缓存(cache)是加速从硬盘中读取数据的
缓冲(buffer)是加速数据写入磁盘的
都是站在磁盘角度来说的
45. wait()方法用该在循环中调用更合适...
Jit --即时编译:just in time compilation
46. 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高
47. 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,
MySQL才会执行Row lock(只锁住被选取的资料例),否则MySQL将会把整个资料表单给锁住
48. 什么是cookie? 与session的区别?
cookie是存储key-value的文件,是客户端保存用户信息的一种机制。也是实现session的一种方式。是http协议的一种扩展。
务必记住,它是由服务器将cookie添加到response里一并返回给客户端,然后客户端会自动把response里的cookie接收下来,并且保存到本地,下次发出请求的时候,就会把cookie附加在request里,服务器在根据request里的cookie遍历搜索是否有与之符合的信息
49. redis相关:redis每秒可以处理10万次的读写操作,单个value的最大限制是1GB
(其中字符串类型最大512m),不像memcached只能保存1MB的数据。Redis的主要缺点 是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写
50. oracle中 rownum和rowid的区别?
rownum是根据查询结果给每一条记录分配一个逻辑编号,从1开始
rowid是物理结构上的,每条记录插入到数据看时,都会有一个唯一的物理编号,是一个18位的字符串
51. JMS -- 是java的api,AMQP--是一种高级队列协议
52. java5.0提供了java.util.concurrent(简称JUC包)
juc包下的队列,采用加锁的方式保证线程安全,不加锁的对列都是无界的
这里的无界(无法保证队列的长度在限定的范围)
false-sharing:伪共享
53. cpu -- 高速缓存(简称缓存:L1,L2,L3)基本组成单位(cache line 64byte)
54. 使用docker命令:docker ps -a,区分容器和镜像的概念,查询当前系统的(运行着的)容器
docker image -- 才是查询当前系统的镜像
55. 网络名词,桥接是怎么理解?
在两个网络之间搭一个桥,将两个网络连接到一起。通过一台设备把网络串联起来
对网络数据包从一个网络转发到另一个网络
56. Java中生成随机数的类Random,这是一个线程安全的类,内部使用CAS来实现线程安全,这个类
并不是真正的随机,而是伪随机,意思就是生成的随机数是有一定的规律的。
57. CAS -- compare-and-swap (比较并替换),是一种实现并发算法时常用到的技术
CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B
CAS虽然很高效的解决了原子操作问题,但是CAS仍然存在三大问题
--循环时间长开销很大
--只能保证一个共享变量的原子操作
--ABA问题
58. ABA问题?-- 如果内存地址V初次读取的值是A,并且在准备赋值的时候检查到它的值仍然为A,那我们就能说它的
值没有被其他线程改变过了吗?
如果在这段期间它的值曾经被改成了B,后来又被改回为A,那CAS操作就会误认为它从来没有被改变过.这个漏洞称为CAS操作的“ABA”问题.Java并发包为了解决这个问题,提供了一个带有标记的原子引用类“AtomicStampedReference”,它可以通过控制变量值的版本来保证CAS的正确性.因此,在使用CAS前要考虑清楚“ABA”问题是否会影响程序并发的正确性,如果需要解决ABA问题,改用传统的互斥同步可能会比原子类更高效
59. ThreadLocalRandom -- jdk1.7之后提供的,用来在并发场景下代替Random。用法比较简单
ThreadLocalRandom.current().nextInt();
ThreadLocalRandom.current().nextInt(10);
减少了对象的维护成本,内部实现也更轻量级,所以ThreadLocalRandom性能很高
60. JMH是什么?它是一个微基准测试框架,什么是微基准?微基准是一个旨在衡量非常小以及特定代码性能的基准
Java Mircobenchmark Harness
harness -- 马具,系带
61. Java8-Method Reference 方法引用
方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例
注意方法引用是一个Lambda表达式,其中方法引用的操作符是双冒号"::",方法引用是一个更加紧凑
易读的Lambda表达式
62. 分布式ID --
uuid ,数据库,redis,zookeeper,数据库分段+服务缓存ID,雪花算法(snowflake) flake-- 碎片,薄片
63. Https -- 端口 443 Http -- 端口 80
64. 分布式锁的一些特点
a. 互斥性,互斥性是最基本,但是分布式锁需要保证在不同节点的不同线程的互斥
b. 可重入性,同一个节点上的同一个线程如果获取了锁之后那么也可以再次获取这个锁
c. 锁超时,和本地锁一样支持锁超时,防止死锁
d. 高效,高可用,加锁和解锁需要高效,同时也需要保证高可用防止分布式锁失效,可以增加降级
e. 支持阻塞和非阻塞,和ReentrantLock一样支持lock和trylock以及tryLock(long timeOut)
65. 实现分布式锁的几种方式
mysql -- select .... from table for update
zookeeper -- 第三方包 curator
redis -- 实现分布式锁 setNx(set if not exist) 如果不存在则更新
这里有个问题,加锁了之后如果机器宕机那么这个锁就不会得到释放所以会加入过期时间,加入过期时间需要和setNx同一个原子操作,在Redis2.8之前我们需要使用Lua脚本达到我们的目的,但是redis2.8之后redis支持nx和ex操作是同一原子操作
java客户端 redission
google自研的chubby
66. mysql 锁机制问题
67. Java GC的时候会发生 STW (stop-the-world)
68. 时间跳跃,分为人为调整和NTP自动调整
NTP -- Network Time Protocol 是计算机时间同步的一种协议
69. Token失效问题?
无状态JWT令牌(Stateless JWT token)发放出去之后
不能通过服务器端让令牌失效,必须等到过期时间过才会失去效用
70. spring-cloud 的两个负载均衡组件
ribbon是对服务之间调用做负载,是服务之间的负载均衡,zuul是可以对外部请求做负载均衡
71. 二分查找法于1946年公布,第一个没有bug的二分查找程序出现于1962年
72. 如果a的x次方等于N (a > 0 && a != 1)那么数x叫做以a为底N的对数
记作x=logaN 其中a叫做对数的底数,N叫做真数
===> 以a为底的N的对数 二分查找的时候大概进行的次数为:㏒₂ⁿ次
73. 列出几种运行型异常:
ArithmeticException,BufferOverflowException
ClassCastException,IndexOutOfBoundsException
NullPointerException
74. 列出几种检查型异常:
ClassNotFoundException,IOException
FileNotFoundException等。
构造方法可以抛出异常------
75. war模式—-将WEB工程以包的形式上传到服务器
war exploded模式—-将WEB工程以当前文件夹的位置关系上传到服务器
76. CAP理念:它的意思是,一个分布式系统不能同时满足一致性
可用性和分区容错性这三个需求,最多只能同时满足两个
1. 一致性(Consistency):任何一个读操作总是能读取到之前完成的写操作结果,
这里的一致性是强一致性
2. 可用性(Availability)每一个操作总是能够在确定的时间内返回,也就是系统随时都是可用的
3. 分区容错性(Partition Tolerance): 在出现网络分区(比如断网)的情况下,分离的系统也能正常运行,被分割的节点仍能对外提供服务
77. Comparable -- 接口可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些
类的实例是可以互相比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较法
compareTo方法的返回值是int,有三种情况:
1、比较者大于被比较者(也就是compareTo方法里面的对象),那么返回正整数
2、比较者等于被比较者,那么返回0
3、比较者小于被比较者,那么返回负整数
78. Comparator -- 接口可以认为是一个为比较器,有两种情况可以使用实现Comparator接口的方式
1、一个对象不支持自己和自己比较(没有实现Comparable接口),但是又想对两个对象进行比较
2、一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是自己想要的那种比较方式
compare方法的返回值是int,有三种情况同上...
79. 综合77,78个人认为Comparable和Comparator两者只是方法签名不同,比较规则都是自己实现
Comparable --> compareTo 接受一个参数
Comparator --> compare 接受两个参数
80. awk:awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑
awk在其对数据分析并生成报告时,显得尤为强大,简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理
81. 实现线程同步的两种方式:
1>使用 synchronized关键字
2>使用 wati()和 notify()方法
82. 不管是32位的JVM还是64位的JVM,对于long和double类型(64位)变量的读写都不是原子性的,
每次操作32位
83. 四种会话跟踪技术:
1>URL重写
2>表单隐藏域
3>cookie
4>session
84. 代理种类:
jdk动态代理 -->通过接口的方式
ciglib -->通过目标类子类的字节编码技术
85. 自定义线程池大小经验(非本人的),网上搜集的:
如果是CPU密集型应用,则线程池大小设置为N+1
如果是IO密集型应用,则线程池大小设置为2N+1
86. Super表示当前类的父类对象
This表示当前类的对象
87. Tomcat的三个最重要的启动脚本:
startup.bat
catalina.bat
setclasspath.bat
执行startup.bat脚本主要做了以下几件事:
设置 CATALINA_HOME 环境变量的值
找到 catalina.bat 脚本
调用 catalina.bat 脚本, 并把参数传过去
88. 静态的方法或是环境中不能调用非静态的方法或是变量
89. 在学到通过反射获取结合的add方法,可绕过泛型的限制的,用下面的方式成功绕过了你泛型
ArrayList<Integer> collections1 = new ArrayList<Integer>()
collections1.getClass().getMethod("add",Object.class).invoke(collections1,"aaa")
System.out.println(collections.get(0));//可获得正确的输出
90. maven的一个标签:
<scope>标签:
<compile> --编译范围
<system> --系统范围
<test> -- 测试范围
<provided> -- 已提供范围
<runtime> -- 运行时范围
<import> -- 它只使用在<dependencyManagement>中,表示从其它的pom中导入dependency的配置
91. LRU算法 -- Least Recently Used(最近最久未使用) -- 缓存淘汰算法
LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小,也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰
实现方式: LinkedHashMap
LinkedHashMap底层就是用的HashMap加双链表实现的,而且本身已经实现了有序存储,此外,LinkedHashMap中本身就,实现了一个方法removeEldestEntry用于判断是否需要移除最不常读取的数,方法默认是直接返回false,不会移除元素,所以需要重写该方法,即当缓存满后就移除最不常用的数
92. LinkedHashMap -- 详解
HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap。由于LinkedHashMap是HashMap的子类,所以LinkedHashMap自然会拥有HashMap的所有特性
93. IntegerCache: Integer内部类,第一次初始化的时候,cache数组会存储[-128---127]这些常量
94. SSO -- Single Sign On(单点登陆)
是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分
95. DNS(Domain Name System 的缩写)
作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。
举例来说,如果你要访问域名math.stackexchange.com
首先要通过DNS查出它的IP地址是151.101.129.69
96. DNS服务器,分级查询。域名的分类:
根域名:.root根域名.root对于所有域名都是一样的,所以平时是省略的
顶级域名:.com .cn .net等
次级域名:www.baidu.com这里的.baidu就是次级域名(二级域名),这一级域名是用户可以注册的
三级域名(主机名):再下一级是主机名(host),比如www.example.com里面的www,这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的
主机名.次级域名.顶级域名.根域名# 即:host.sld.tld.root
97. 抓包工具 --- wireshark(开源的),需要了解一下
arthas -- Alibaba开源的针对java问题诊断的工具
Jprofiler -- java性能剖析工具
yourKit,JVM profiler等...
98. 消息队列的幂等性?其实就是消息不被重复消费
99. Kong -- 是一个云原生,高效,可扩展的分布式API网关。其核心价值在于高性能和可扩展性
OpenResty -- (又称:ngx_openresty)是一个基于NGINX的可伸缩的Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块
100. 其实MD4,MD5,SHA-1...都是散列算法的一种(hash算法)
更多推荐
所有评论(0)