map学习总结

一、hashMap 数据结构:
1、底层原理:
  1)1.7版本以前,底层是通过数组加链表实现的
  2)1.8版本 ,底层是数组+链表+红黑树实现的,引入红黑树是因为链表查询效率低,
  效率低:1.7 当我们的多个KEY ,计算吃的index 值发生冲突的情况下,会存放在同一个链表中,查询效率较低,从头查到尾,时间复杂度为O(n)
          1.8 当数组容量大于等于64 且列表长度大于8时,会将链表转换为红黑树,从而提高多个KEY ,如果发生Index 值冲突时
  时间复杂度: 1.7 index 不冲突 ,复杂度为O1,一次即可以查询到,发生冲突就需要从头查到尾,复杂度为O(n)
               1.8  index  链表转为红黑树 时间复杂度为 Ologn
二、hashMap有序吗?
   无序,因为他是散列表,会根据输入的值去计算存储,1——10 ,有可能存储到 index2 位置,
   实现有序存储,可以使用linkHashMap (使用双向链表)
三、key =null 存放在什么位置?  存放在index0 
四、hashMap如何解决hash冲突 需要从三个方面回答:
1、了解hash算法与hash表
 (1)哈希算法:把任意长度的输入,变成固定长度的输出,输出为散列值,压缩映射,散列值的空间通常远小于输入的空间,不同的输入可能会散列成不同的输出,不能通过散列值确定输入的唯一值
 (2)hash表:hash 表又叫做散列表,通过key直接访问到内存存储位置的数据结构,通过hash函数,把key映射到表中的某个位置,获取某个数据的位置,从而加快数据的查找
2、由于哈希算法被计算的数据是无限的,而计算后的结果范围是有限的,会出现不同的数据经过计算得到的值是一样的
3、常用的hash 算法:
MD4:
MD5:
SHA-1:

解决hash冲突的方法(四种)
1、开放定址法(线性探测法):寻找一个新的空闲的哈希地址
2、链地址法
3、再哈希法
4、建立公共溢出区法
五、hashTable 数据结构:

六、hashMap与hashTable 区别
1、hashTable 线程安全,方法都加了Synchronized 同步锁,内部使用 数组+ 链表 
2、hashMap 线程不安全,内部 数组+链表 (1.7以前) 数组+链表+红黑树(1.8)
3、hashMap 初始容量是16 ,hashTable 初始容量是11 
4、hashMap 可以使用null 作为key ,放在index0 位置,hashTable 不允许
5、两个key 的散列算法不同,hashMap 做了二次散列(避免Key分布不均匀,影响性能),提高性能, hashTable 对hashCode做取模

七、list 
 1、数据结构
 2、ArrayList 和LinkList(双向链表)
  区别:1)原理区别: ArrayList:数组实现   元素连续存储
                      LinkList: 链表实现   随机访问 (从头结点访问到尾结点)
        2)使用区别: ArrayList: 增删慢、查询快
                      LinkList: 增删快、查询慢
八、ConcurrentHashMap 
    原理:保证线程安全,分段加锁(根据Segment 对于不同段加锁)
    jdk7 ;数据结构:ReentrantLock+ Segment + HashEntry    
    jdk8 : Synchronized +CAS(乐观锁) +node +红黑树  
           锁链表head节点,锁粒度更细,效率更高
九、Cookie与session
 cookie:客户端浏览器保存服务端信息的一种方式。把一些状态数据以 Key-value 的形式存储到客户端浏览器(针对客户端)
 session :是一个会话,属于服务端的一个容器对象,(针对服务端) 对于浏览器的请求,servelet容器对象会分配一个Session 对象,存储当前会话
          产生的状态数据,弥补http协议的无状态,产生的sessionId 存储有状态的数据
          
十、jdk\jre\jvm 区别  jdk {jre(jvm + lib库) + java工具}
  jdk: java开发工具
  jre: java运行环境
  jvm: 虚拟机 编译.class 文件 ,解释程序
十一、 == 与equals 
  1) == : 对比栈中的值, 比较两个变量值是否相等
  2)equals : 比较两个独立对象的内容是否相等,  equals 重写,两个对象相等时,hashcode一定相等
十二、string、stringBuffer、stringBuilder
  string : final修饰的,不可改变,每次操作都会产生新的对象
  stringBuffer: 在对象上操作, 线程安全   方法都是Synchronized 修饰
  stringBuilder: 在对象上操作,线程不安全 
  性能: stringBuilder >stringBuffer >string
  
十三、list set 
  list : 有序 按顺序,可重复  ,允许多个null,取值时:用迭代器和 get(index )
  set: 无序 ,不可重复 最多一个null          取值时:只能用迭代器
十四、mybabtis mybatis-plus
 1、mybatis 是如何进行分页的
   逻辑分页与物理分页
   三种分页方式:mybatis mapper 配置文件里面直接写分页sql 
                 通过RowBounds 实现逻辑分页(一次性查询,在内存中去分页) 适用小数据量
                 Inteceptar 拦截器实现,拦截需要分页的select数据,select语句中动态拼接分页关键字
 2、mybatis 里面的缓存机制
    设计了二级缓存,提升数据的检索效率,一级缓存是SqlSession 缓存(减少查询数据库的次数)跨SqlSesssion 不满足一级缓存,会重新查询数据库(多个用户访问相同数据)
    二级缓存会把任何一个sqlsession 拿到了数据,就会放到二级缓存
    实现原理:一级缓存:sqlsession 会持有一个executor , 每个executor 会有一个localCache 的对象,用户发起查询时,回去localCache 中查找,如果有
                        数据,直接返回,负责查询数据库,写入到localCache
              二级缓存:再一级的基础上,给executor 做了一个装饰器,CachingExecutor ,先进行二级缓存查询,开启二级缓存,是一个全局缓存,会被多个
                        sqlsession 共享 , 
 3、#{} 与${} 区别
    都是实现动态Sql的一种方式,通过这种方式将参数传递到xml中。执行时会对这两个占位符进行解析
    #{} :等同于jdbc 里面的? 占位符, preparedStatment 会进行预编译,会将特殊字符进行转义处理。# 可以防止sql注入
    ${} : 直接把参数拼接到sql 中
 4、mybabtis 优缺点:
    优点:解耦(sql单独写、接触与程序代码的耦合)。减少代码量(不需要手动开关连接)、支持动态sql 、能够与spring很好的整合、提供映射标签
    缺点:sql 语句编写量大,尤其是字段比较多、关联表多
          sql 语句依赖于数据库,导致数据库的移植性差,不能随意更换数据库
 5、mybatis-plus
     基于mybatis 的一个增强工具,简化开发、提高效率
    分页: 内置分页,配置一个分页插件,引入依赖
           自定义分页,在xml中写sql ,mapper接口中 返回Ipage 即可实现分页
 6、条件构造器:Wrapper
    queryWrapper(查询)
    updateWrapper(更新)
    lambdaWrapper --- 避免出现硬编码
 7、mybatis 与 mybatis-plus 如何选择
    mybatis : 优点: 轻量、高效,使用标签
    mybatis-plus :简化开发
十五、微服务开发 
 1、springboot约定优于配置的理解(不同方面)
    1) 他是一种软件设计的范式,核心思想是减少软件开发人员对配置项的维护
    2)是一个约定优于配置理念下的一个产物,是spring下的脚手架,使我们基于spring框架快速开发
    3)基于传统的spring框架,要做很多的配置项,只需要做一次(如:jar 依赖,web.xml维护等),springboot 不需要做这些配置
    4)体现: 启动依赖 (start 会自动管理jar ,其次内置tomcat容器去运行web应用)
 2、springboot 自动装配的原理
    自动装配简单来说,就是把第三方组件的bean装载到ioc容器里面,不需要去写装配bean的配置,只需要在启动类上架注解@SpringBootApplication 就可以
    复合注解(@EnableAutoConfiguration),实现主要依靠三个核心的技术:1、引入Starter 2、配置类放在第三方的jar 包,通过SpringBoot 约定优于配置
    的理念,把这个配置类的全路径 放在 classPath>/META_INF/spring.factories 3、springboot 拿到第三方jar包声明的配置类之后,再通过spring提供的ImportSelector
    接口,实现对这些配置类的动态加载,完成自动装配
 3、springboot如何解决跨域问题
    同源策略下 解决跨域的方式:
    1)jsonp
    2) cors 服务器后端解决跨域的一种  
      使用注解 @CrossOrigin (指定域名)
      WebMvcConfigurer接口
十六、SpringCloud生态
    1、Dubbo请求失败如何处理
      Dubbo 是一个RPC框架,提供远程通信的能力,涵盖了服务注册、动态路由、容错、服务、负载均衡等
      默认提供重试,服务消费者会向服务提供者进行重新请求,次数2次
      
     
    
     
    
                 
   
   
 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mAP画图是深度学习中的一个指标,用于评估目标检测算法的性能。mAP代表平均精度均值(mean Average Precision),它是通过计算不同类别的精度-召回曲线下的面积来得到的。精度-召回曲线是在不同的召回率下计算的,召回率是指检测到的正样本与所有正样本的比例,而精度是指检测到的正样本中真正正确的比例。 在深度学习中,mAP画图通常用于比较不同模型或算法在目标检测任务上的性能。通过绘制精度-召回曲线,并计算曲线下的面积,可以得到一个综合评估指标,用于衡量模型的准确性和鲁棒性。 如果你想了解更多关于mAP画图和深度学习的内容,可以参考\[1\]中提供的链接,里面有详细的介绍和实践案例。 #### 引用[.reference_title] - *1* *3* [深度学习系列资料总结](https://blog.csdn.net/qq_36816848/article/details/125829496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [深度学习画图工具](https://blog.csdn.net/qq_40677266/article/details/92793474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值