2025年开发过程当中记录的一下小tips

开发过程当中记录的一下小tips1 oss open storage service 阿里云存储服务 2 swagger2 2 6 0 与 springboot 集成 偶尔会有问题 改成高版本 3 http 403 一般是请求的方式不对 get 请求 用成了 post 请求 4 ios 文件后缀 ipa android

大家好,我是讯享网,很高兴认识大家。

1. oss -- open storage service  阿里云存储服务..

2. swagger2 -- 2.6.0 --与springboot集成 偶尔会有问题,改成高版本.

3. http --- 403 一般是请求的方式不对 (get请求,用成了post请求)

4. ios -- 文件后缀ipa,android -- 文件后缀apk

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)

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

15. 服务器操作系统:windows,linux,netware,unix
    个人桌面操作系统:个人pc
    嵌入式操作系统:Andriod ios....

16. java.net.UnknownHostException  ---->域名解析异常

18. jQuery中each类似于javascript的for循环
    但不同于for循环的是在each里面不能使用break结束循环,
    也不能使用continue来结束本次循环,想要实现类似的功能就只能用return,
        break           用return false
        continue        用return ture

19. 在JavaScript内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值。

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实际上就是一个字符串,它由三部分组成,头部、载荷与签名

28. static 关键字的作用....
        1.可以修饰成员变量,修饰成员方法,可以修饰内部类(静态内部类...)。
        2.可以修饰代码块(静态代码块)。
        3.静态导包。import static com..ClassName.*; 意思是本类中导入这个类里的所有静态方法,调用时直接 方法名即可...  而不用:ClassName.方法名()这样调用。

29. mybatis中 #与 $的区别.....
        # 将传入的数据都当成一个字符串来对待,对传入的数据自动添加一对引号....(这里似乎不能是双引号?????)
        $ 将传入的参数直接拼接在sql上,不做任何的处理... 容易导致sql注入.....order by 的时候 必须用 ${param}

30. sleep()和wait()的区别:
        sleep()是线程类中的一个静态方法,让当前线程睡眠几秒,但并不会释放对象锁。
        vait()是Object类中的方法,该方法让当前线程处于等待状态,并释放当前对象锁,该线程想要再次执行时,需要notify()方法唤醒

34. 路径问题: ./ 表示当前目录下,
    这个当前的意思并非是包或类 所在的当前目录,而是相对整个项目来说的,
    所以应该是 -- 当前类或包所在项目的根目录(即和src目录是同级目录)

35. 数学中质数的定义: 质数又称为素数,有无限多个,大于1的自然数,并且只能被1和其自身整除

36. sqlserver数据库问题:
    首先 sqlyog-可视化工具只是针对 mysql的,所以数据库换成sqlserver,
    可视化工具要换成navicat(即支持mysql,也支持sqlserver)
    其次 sqlserver查询时只写表名会报无效的对象名,正确应该是 库名.所有者名.表名
    因为数据库里的表是按角色管理的,不是所有角色都可以查询某个表

38. Java有一种特别的线程叫做守护线程。这种线程的优先级非常低,
    通常在程序里没有其他线程运行时才会执行它
    当守护线程是程序里唯一在运行的线程时,JVM会结束守护线程并终止程序
    JAVA中最典型的这种类型线程的代表就是垃圾回收器

39. "新建"和"终止"这两种状态其实并不是线程的状态,而是java.lang.Thread对象的状态。
    可以说,处于"新建"和"终止"状态的"线程"其实并不是线程,而只是代表着一个线程对象而已。
    所以我们把"新建(NEW)"和"终止(TERMINATED)"两种状态去掉,那么线程的状态有:
      就绪状态(可运行状态)
      运行状态
      阻塞状态

40. 垃圾收集的时候,怎么确定一个对象是垃圾对象?根搜索算法的基本思路就是通过一系列名为
    ”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可达的。
    可作为 GC Roots(根集)的对象:
    1.栈的栈帧中的局部变量所引用的对象
    2.本地方法栈中的JNI所引用的对象
    3.方法区的静态变量和常量所引用的对象
    ----方法区中存在垃圾回收:废弃的常量和无用的类

43. Exception && RuntimeException层级关系
    Throwable ---|Exception --| RuntimeException
                 |Error
    以上都是类,没有接口

44. 缓存与缓冲的区别?
    简单来说:缓存(cache)是加速从硬盘中读取数据的
              缓冲(buffer)是加速数据写入磁盘的
    都是站在磁盘角度来说的

48. 什么是cookie? 与session的区别?
    cookie是存储key-value的文件,是客户端保存用户信息的一种机制。也是实现session的一种方式。是http协议的一种扩展。
    务必记住,它是由服务器将cookie添加到response里一并返回给客户端,然后客户端会自动把response里的cookie接收下来,并且保存到本地,下次发出请求的时候,就会把cookie附加在request里,服务器在根据request里的cookie遍历搜索是否有与之符合的信息

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) 

55. 网络名词,桥接是怎么理解?
    在两个网络之间搭一个桥,将两个网络连接到一起。通过一台设备把网络串联起来
    对网络数据包从一个网络转发到另一个网络

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表达式

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)

69. Token失效问题?
    无状态JWT令牌(Stateless JWT token)发放出去之后
    不能通过服务器端让令牌失效,必须等到过期时间过才会失去效用

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等。
    构造方法可以抛出异常------

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 接受两个参数

81. 实现线程同步的两种方式:
    1>使用 synchronized关键字
    2>使用 wati()和 notify()方法

83. 四种会话跟踪技术:
    1>URL重写
    2>表单隐藏域
    3>cookie
    4>session

84. 代理种类:
    jdk动态代理 -->通过接口的方式
    ciglib -->通过目标类子类的字节编码技术

85. 自定义线程池大小经验(非本人的),网上搜集的:
    如果是CPU密集型应用,则线程池大小设置为N+1
    如果是IO密集型应用,则线程池大小设置为2N+1

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,不会移除元素,所以需要重写该方法,即当缓存满后就移除最不常用的数

93. IntegerCache: Integer内部类,第一次初始化的时候,cache数组会存储[-128---127]这些常量

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. 消息队列的幂等性?其实就是消息不被重复消费

100. 其实MD4,MD5,SHA-1...都是散列算法的一种(hash算法)

小讯
上一篇 2025-03-28 16:05
下一篇 2025-01-16 12:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/19280.html