当前位置: 首页 > news >正文

泉州专业做网站开发做网站mfdos

泉州专业做网站开发,做网站mfdos,赶集的网站怎么做,国外网站设计文章目录 1、ArrayList和Linkedlist区别#xff1f;2、ArrayList扩容机制#xff1f;3、ArrayList和Linkedlist分别能做什么场景#xff1f;4、事务特性#xff1f;MySQL事务Redis事务Spring事务5、在Spring中事务失效的场景#xff1f;6、Java泛型#xff1f;7、泛型擦除… 文章目录 1、ArrayList和Linkedlist区别2、ArrayList扩容机制3、ArrayList和Linkedlist分别能做什么场景4、事务特性MySQL事务Redis事务Spring事务5、在Spring中事务失效的场景6、Java泛型7、泛型擦除8、创建线程的方式runnable和callable的区别9、Synchronized和Lock的区别10、Java锁升级机制11、为什么选择SpringBootSpringBoot自动装配12、servlet容器JSP九大内置对象cookie和session区别13、常用的限流算法单机限流分布式限流14、Mybatis中#{}和${}区别?15、Mybatis一级缓存和二级缓存16、Redis持久化机制17、数据表建索引的原则18、索引失效索引优化19、了解过SpringBoot吗说一下SpringBootApplication底层20、HashMap和Hashtable的区别底层21、线程池的创建以及使用场景ThreadPoolExecutor参数22、Redis为什么这么快以及使用场景缓存分布式锁23、Spirngboot的优势24、Springboot里面的容器有哪些25、Springboot常用注解26、数据库多表连接方式MySQL慢查询27、MySQL的锁有哪些28、线程池为什么使用 ThreadPoolExector 有什么好处具体流程拒绝策略详细说明29、常见的Spring注解30、Autowired和Recource之间区别 1、ArrayList和Linkedlist区别 2、ArrayList扩容机制 https://www.yuque.com/qianmys/tbcnb5/sy2mwz7om0z8g9gd 3、ArrayList和Linkedlist分别能做什么场景 频繁随机访问——ArrayList 频繁插入删除——LinkedList 4、事务特性 ACID原子性、一致性、隔离性、持久性 MySQL事务 要么全部执行成功要么全部执行失败 四大特性ACID原子性、一致性、隔离性、持久性 事务并发问题脏读、幻读、不可重复读 事务隔离级别读未提交、读已提交、可重复读、串行序列化 需要分别解释上述特点 Redis事务 Redis事务一个步骤中执行一组命令 1、Redis事务不具有原子性Redis 不能保证所有指令同时成功和失败只能保证事务的指令一同执行因为对Redis来说事务回滚带来的代价太大影响性能 2、Redis事务不具有隔离性Redis 事务在提交之前任何指令都不会实际的被执行所以不存在MySQL中脏写脏读不可重复读幻读等问题 Redis事务常用命令 1、MULTI标记一个事务块的开始 2、EXEC执行事务块中的所有命令 3、DISCARD取消事务放弃执行事务块中的所有命令 4、UNWATCH取消 WATCH 命令对所有 key 的监控 5、WATCH key [key…]监控一个或多个key如果事务执行之前这些key被其他事务改动事务就会被打断 WATCH 底层采用的是CAS乐观锁如果我们使用WATCH监控了一些 key那么在事务中在执行修改这些被监控的 key 数据的时候会判断当前 key 的值是否与期望值一样如果一样就会做修改如果不一样就会放弃修改当前整个事务的操作都会放弃执行 Spring事务 分类 1、编程式事务TransactionTemplate/TransactionManager× 2、声明式事务Transactional√ 事务传播行为 1、TransactionDefinition.PROPAGATION_REQUIREDpropagation_required 如果当前存在事务则加入该事务如果当前没有事务则创建一个新的事务 2、TransactionDefinition.PROPAGATION_REQUIRES_NEWrequires_new 创建一个新的事务如果当前存在事务则把当前事务挂起 3、TransactionDefinition.PROPAGATION_NESTEDnested 如果当前存在事务则创建一个事务作为当前事务的嵌套事务来运行 如果当前没有事务则该取值等价于1 4、TransactionDefinition.PROPAGATION_MANDATORYmandatory× 如果当前存在事务则加入该事务如果当前没有事务则抛出异常 事务将不会发生回滚 1、TransactionDefinition.PROPAGATION_SUPPORTS如果当前存在事务则加入该事务如果当前没有事务则以非事务的方式继续运行 2、TransactionDefinition.PROPAGATION_NOT_SUPPORTED以非事务方式运行如果当前存在事务则把当前事务挂起 3、TransactionDefinition.PROPAGATION_NEVER以非事务方式运行如果当前存在事务则抛出异常 注解 Transactional(rollbackFor Exception.class)注解事务在遇到非运行时异常时也回滚 如果不配置rollbackFor属性,那么事务只会在遇到RuntimeException的时候才会回滚 事务管理相关三个接口 1、PlatformTransactionManager平台事务管理器Spring 事务策略的核心 2、TransactionDefinition事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则) 3、TransactionStatus事务运行状态 Spring 并不直接管理事务而是提供了多种事务管理器 。Spring 事务管理器的接口是PlatformTransactionManager Transactional 可用在方法public、类、接口×上 Transactional 的工作机制是基于 AOP 实现的AOP 又是使用动态代理实现的。如果目标对象实现了接口默认情况下会采用 JDK 的动态代理如果目标对象没有实现了接口,会使用 CGLIB 动态代理 public类或方法上使用Transactional注解Spring容器在启动时为其创建一个代理对类方法实际调用的是TransactionInterceptor 类中的 invoke()方法 事务失效 1、Transactional 注解只有作用到 public 方法上事务才生效不推荐在接口上使用 2、避免同一个类中调用 Transactional 注解的方法这样会导致事务失效 3、被 Transactional 注解的方法所在的类必须被 Spring 管理否则不生效 4、底层使用的数据库必须支持事务机制否则不生效 5、在Spring中事务失效的场景 1、数据库不支持事务 2、事务方法未被spring管理 3、方法没有被public修饰 4、同一类中方法调用 5、未配置事务管理器 6、方法的事务传播类型不支持事务 7、不正确的捕获异常 8、错误的标注异常类型 // 同一类中方法调用 Service public class MyService { private void method1() {// 先获取该类的代理对象然后通过代理对象调用method2((MyService)AopContext.currentProxy()).method2(); } Transactionalpublic void method2() {} }6、Java泛型 7、泛型擦除 8、创建线程的方式runnable和callable的区别 1、继承Thread类 2、实现Runnable方法 3、实现Callable方法 4、创建线程池 9、Synchronized和Lock的区别 10、Java锁升级机制 在锁对象的对象头里面有一个 threadid 字段 第一次访问的时候 threadid 为空jvm 让其持有偏向锁并将 threadid 设置为其线程 id 再次进入的时候会先判断 threadid 是否与其线程 id 一致 如果一致则可以直接使用此对象如果不一致则升级偏向锁为轻量级锁 通过自旋循环一定次数来获取锁执行一定次数之后如果还没有正常获取到要使用的对象此时就会把锁从轻量级升级为重量级锁 1、同步锁只有一个线程访问——偏向锁减少加锁解锁的CAS操作 2、有其他线程抢占锁——轻量级锁 3、第二个线程加入锁争用——重量级锁 11、为什么选择SpringBoot 简化配置方便集成其他主流框架使开发更简单 SpringBoot自动装配 自动去把第三方组件的Bean装载到IOC容器中不需要开发人员再去写Bean相关的配置 在springboot应用里面只需要在启动类上去加上SpringBootApplication注解就可以去实现自动装配它是一个复合注解真正去实现自动装配的注解是 EnableAutoConfiguration这样一个注解自动装配的实现主要依靠三个核心的关键技术 1、引入starter启动依赖组件的时候这个组件里面必须包含有一个 Configuration配置类而在这个配置类里面我们需要通过Bean这个注解去声明需要装配到IOC容器里面的Bean对象。 2、第三方jar包里面的配置类全路径都将放在classpath:/META-INF/spring.factories文件里面这样的话springboot就可以知道第三方jar包里面这个配置类的位置。这个步骤主要是用到了spring里面的SpringFactoriesLoader来完成的。 3、springboot拿到所有第三方jar包里面声明的配置类以后再通过Spring提供的ImportSelector这样一个接口Import注解功能来实现对这些配置类的动态加载从而去完成自动装配的动作 12、servlet容器 Servlet主要负责接收用户请求 HttpServletRequest在doGet(),doPost()中做相应的处理并将回应HttpServletResponse反馈给用户Servlet 可以设置初始化参数供 Servlet 内部使用一个 Servlet 类只会有一个实例在它初始化时调用init()方法销毁时调用destroy()方法Servlet 需要在 web.xml 中配置一个 Servlet 可以设置多个 URL 访问Servlet 不是线程安全因此要谨慎使用类变量 JSP九大内置对象 page页面对象config配置对象request请求对象response响应对象session会话对象application全局对象out输出对象pageContext页面上下文对象exception异常对象 cookie和session区别 1、Cookie 一般用来保存用户信息 登录一次网站后访问网站其他页面不需要重新登录 Session 主要作用就是通过服务端记录用户的状态。 典型的场景是购物车当你要添加商品到购物车的时候系统不知道是哪个用户操作的因为 HTTP 协议是无状态的服务端给特定的用户创建特定的 Session 后就可以标识这个用户并且跟踪这个用户 2、Cookie 数据保存在客户端(浏览器端)Session 数据保存在服务器端 3、 Session 安全性更高。如果使用 Cookie 的一些敏感信息不要写入 Cookie 中最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密 13、常用的限流算法 1、固定窗口计数器算法 使用一个counter计数每处理一个请求counter1达到设定值之后后续请求就会被拒绝 问题无法保证突然激增的流量 2、滑动窗口计数器算法 可以把时间以一定比例分片 如接口限流每分钟处理 60 个请求我们可以把 1 分钟分为 60 个窗口。每隔 1 秒移动一次每个窗口一秒只能处理 不大于 60(请求数)/60窗口数 的请求。如果当前窗口的请求计数总和超过了限制的数量的话就不再处理其他请求 特点当滑动窗口的格子划分的越多滑动窗口的滚动就越平滑限流的统计就会越精确 3、漏桶算法 把发请求的动作比作成注水到桶中处理请求的过程可以比作漏桶漏水。我们往桶中以任意速率流入水以一定速率流出水。当水超过桶流量则丢弃因为桶容量是不变的保证了整体的速率 实现队列 与消息队列削峰/限流的思想是一样 4、令牌桶算法 现在桶里装的是令牌请求在被处理之前需要拿到一个令牌请求处理完毕之后将这个令牌丢弃删除。我们根据限流大小按照一定的速率往桶里添加令牌。如果桶装满了就不能继续往里面继续添加令牌了 单机限流 1、RateLimiter Google Guava 自带的限流工具类RateLimiter 基于令牌桶算法可以应对突发流量还提供了平滑预热限流的算法实现 平滑突发限流就是按照指定的速率放令牌到桶里平滑预热限流会有一段预热时间预热时间之内速率会逐渐提升到配置的速率 2、Bucket4j 一个非常不错的基于令牌/漏桶算法的限流库不仅支持单机限流和分布式限流还可以集成监控搭配 Prometheus 和 Grafana 使用 3、Resilience4j不仅提供限流还提供了熔断、负载保护、自动重试等保障系统高可用开箱即用的功能Resilience4j 的生态也更好很多网关都使用 Resilience4j 来做限流熔断的 分布式限流 1、借助中间件架限流可以借助 Sentinel 或者使用 Redis 来自己实现对应的限流逻辑 2、网关层限流比较常用的一种方案直接在网关层把限流给安排上了。不过通常网关层限流通常也需要借助到中间件/框架。就比如 Spring Cloud Gateway 的分布式限流实现RedisRateLimiter就是基于 RedisLua 来实现的再比如 Spring Cloud Gateway 还可以整合 Sentinel 来做限流 为什么建议 RedisLua 的方式 1、减少了网络开销我们可以利用 Lua 脚本来批量执行多条 Redis 命令这些 Redis 命令会被提交到 Redis 服务器一次性执行完成大幅减小了网络开销。 2、原子性一段 Lua 脚本可以视作一条命令执行一段 Lua 脚本执行过程中不会有其他脚本或 Redis 命令同时执行保证了操作不会被其他指令插入或打扰 14、Mybatis中#{}和${}区别? 1、${}是 Properties 文件中的变量占位符它可以用于标签属性值和 sql 内部属于静态文本替换比如${driver}会被静态替换为com.mysql.jdbc. Driver。 2、#{}是 sql 的参数占位符MyBatis 会将 sql 中的#{}替换为? 号在 sql 执行前会使用 PreparedStatement 的参数设置方法按序给 sql 的? 号占位符设置参数值比如 ps.setInt(0, parameterValue)#{item.name} 的取值方式为使用反射从参数对象中获取 item 对象的 name 属性值相当于 param.getItem().getName() 15、Mybatis一级缓存和二级缓存 1、一级缓存是mybatis中默认开启的缓存机制它是基于线程的本地缓存适用于单线程、读多写少的场景 2、二级缓存是基于namespace级别的缓存可以被多个SqlSession对象共享被多个SqlSession对象共享适用于多线程、读写频繁的场景 16、Redis持久化机制 RDB、AOF 文件类型RDB生成的是二进制文件快照AOF生成的是文本文件追加日志安全性缓存宕机时RDB容易丢失较多的数据AOF根据策略决定默认的everysec可以保证最多有一秒的丢失文件恢复速度由于RDB是二进制文件所以恢复速度也比 AOF更快操作的开销每一次RDB保存都是一次全量保存操作比较重通常设置至少5分钟保存一次数据。而AOF的刷盘是一次追加操作操作比较轻通常设置策略为每一秒进行一次刷盘 17、数据表建索引的原则 适合 字段唯一性常用where查询的字段常用group by和order by的字段 不适合 WHERE 条件GROUP BYORDER BY 里用不到的字段字段中存在大量重复数据MySQL优化器对于出现比例高的索引会忽略索引进行全表扫描经常更新的字段 18、索引失效 左或左右模糊匹配——违背了最左匹配原则对索引列做计算、函数、类型转换操作联合索引要遵循最左匹配原则whereor前是索引列or后不是索引列 索引优化 覆盖索引优化利用覆盖索引优化避免回表主键索引自增索引是按顺序存储数据的如果主键的值是随机的值可能会引发页分裂的现象 页分裂会导致大量的内存碎片防止索引失效前缀索引优化减小索引字段大小 主管面听说会看项目源码进行解释 19、了解过SpringBoot吗说一下SpringBootApplication底层 SpringBootConfiguration 创建 SpringBoot 项目之后会默认在主类加上 EnableAutoConfiguration启用 SpringBoot 的自动配置机制ComponentScan扫描被Component (Repository,Service,Controller)注解的 bean注解默认会扫描该类所在的包下所有的类Configuration允许在 Spring 上下文中注册额外的 bean 或导入其他配置类 20、HashMap和Hashtable的区别底层 21、线程池的创建以及使用场景 1、使用构造函数 new ThreadPoolExecutor 2、使用工具类Executors ThreadPoolExecutor参数 corePoolSize 核心线程数maximumPoolSize 最大线程数keepAliveTime 超出核心线程数的线程存活时间TimeUnit unit keepAliveTime单位BlockingQueue workQueue 工作队列存放待处理的任务threadFactory创建线程的工厂类handler饱和策略AbortPolicy、CallerRunsPolicy、DiscardOldestPolicy、DiscardPolicy 22、Redis为什么这么快以及使用场景 缓存 1、缓存模式 常用使用过期时间兜底先更新DB后删除缓存提升数据一致性——适合读多写少 2、缓存异常 双写 3、缓存一致性 1、更新MySQL即可不管Redis以过期时间兜底 2、更新MySQL之后操作Redis 删除√主动删除减少不一致更新少用 更新MySQL删除Redis 3、异步将MySQL同步更新到Redis 引入消息队列业务解耦但成本大 4、为什么需要缓存 根据局部性原理80%的请求会落在20%的热点数据上对于读多写少的场景增加缓存有利于提高吞吐量和健壮性 分布式锁 特性对称性、安全性、互斥性 set key value nx ex secondsnx setnx命令key是锁名字value是持有者id在设置一个过期时间兜底 value必须是谁申请、谁释放在解锁时需要先进行检查 1、加上owner——谁申请、谁释放 2、lua脚本——保证原子操作 查看是否是自己的锁如果是释放锁 Redission 1、如果该客户端面对的是一个redis cluster集群首先会根据hash节点选择一台机器 发送一段lua脚本到redis上lua脚本里面是要执行的业务逻辑 2、第二个客户端加锁 https://www.cnblogs.com/AnXinliang/p/10019389.html 3、watch dog自动延期机制只要客户端1一旦加锁成功就会启动一个watch dog看门狗是一个后台线程会每隔10秒检查一下如果客户端1还持有锁key那么就会不断的延长锁key的生存时间 4、可重入加锁机制incrby myLock 对客户端1的加锁次数累加1 5、释放锁机制发现加锁次数是0了说明这个客户端已经不再持有锁了此时就会用del myLock命令删除 23、Spirngboot的优势 1、容易与 Spring 生态系统集成如 Spring JDBC、Spring ORM、Spring Data、Spring Security 2、提供嵌入式 HTTP 服务器如 Tomcat 和 Jetty可以轻松地开发和测试 web 应用程序 3、提供了多种插件 Maven方便开发 24、Springboot里面的容器有哪些 四种Web容器分别为TomcatJettyUndertowNetty 容器负责管理应用程序的生命周期、处理请求和响应、管理对象的生命周期 容器的主要组件 1、SpringApplication SpringBoot 应用程序的核心类负责启动 SpringBoot 应用程序并负责初始化和配置ApplicationContext 容器 步骤 添加SpringBootApplication 注解包括Configuration、EnableAutoConfiguration 和 ComponentScan使用 SpringApplication.run() 方法启动了 SpringBoot 应用程序两个参数应用程序的主类和命令行参数 2、ApplicationContext Spring Framework 的核心容器负责管理和组织应用程序中的各个 Bean 对象提供了依赖注入、AOP、事件机制等功能 3、DispatcherServlet Web MVC 框架的核心组件负责处理 HTTP 请求和响应将请求分发给对应的 Controller并将 Controller 的响应返回给客户端 4、WebMvcConfigurer Spring MVC 的配置接口提供了多个方法可以用于配置 Spring MVC 框架的各种选项 由Spring MVC自动配置创建和初始化可以通过实现该接口来扩展和定制Spring MVC框架的功能如配置跨域资源共享 (CORS) 5、Filter Java Servlet API 的核心组件之一负责处理 HTTP 请求和响应并可以在请求和响应之间添加各种逻辑处理 可以通过实现 Filter 接口或继承 OncePerRequestFilter 类来实现 6、Servlet Java Servlet API 的核心组件之一负责处理 HTTP 请求和响应 可以通过实现 Servlet 接口或继承 HttpServlet 类来实现 7、EmbeddedServletContainer SpringBoot 内嵌的 Web 容器负责处理 HTTP 请求和响应并管理应用程序的生命周期 SpringBoot 支持多种内嵌的 Web 容器例如 Tomcat、Jetty、Undertow 25、Springboot常用注解 https://javaguide.cn/system-design/framework/spring/spring-common-annotations.html 26、数据库多表连接方式 内连接 外连接左外、右外 MySQL慢查询 27、MySQL的锁有哪些 全局锁表级锁表锁、元数据锁MDL、意向锁、AUTO-INC锁行级锁Record Lock记录锁、Gap Lock间隙锁、Next-Key Lock临键锁、插入意向锁 28、线程池为什么使用 ThreadPoolExector 有什么好处具体流程拒绝策略详细说明 执行流程 判断线程池里的核心线程是否都在执行任务如果不是核心线程空闲或者还有核心线程没有被创建则创建一个新的工作线程来执行任务。如果核心线程都在执行任务则进入下个流程线程池判断工作队列是否已满如果工作队列没有满则将新提交的任务存储在这个工作队列里。如果工作队列满了则进入下个流程判断线程池里的线程是否都处于工作状态如果没有则创建一个新的工作线程来执行任务。如果已经满了则交给饱和策略来处理这个任务 29、常见的Spring注解 1、EnableWebMvc在配置类中开启Web MVC的配置支持 2、ControllerComponent注解的一种具体形式还有Service、Repository 3、RequestMapping处理请求地址映射映射web请求到某一个handler GetMapping、PostMapping、PutMapping、PatchMapping、DeleteMapping 4、ResponseBody响应请求的返回Body 5、RequestBody绑定HTTP请求的Body 6、PathVariable使用在请求handler方法的参数 7、RestController同时引入了Controller和ResponseBody两个注解 8、ControllerAdvice与ExceptionHandler一起使用可以统一处理业务异常 9、ExceptionHandler 10、InitBinder日期格式的统一处理 11、ModelAttribute提前绑定全局user对象 12、Transactional使用事务 13、CrossOrigin支持跨域注解 14、ExceptionHandler异常处理 15、Required用于bean的setter方法上必须在配置阶段注入 16、Autowired用于bean的field、setter方法以及构造方法上显式地声明依赖根据type来注入 17、Qualifier和Autowired一起使用指定要绑定的bean名称 18、ConfigurationSpring配置 19、ComponentScan指定Spring扫描注解的package 20、Value指定属性取值的表达式 30、Autowired和Recource之间区别 Autowired 是 Spring 提供的注解Resource 是 JDK 提供的注解。Autowired 默认的注入方式为byType根据类型进行匹配Resource默认注入方式为 byName根据名称进行匹配当一个接口存在多个实现类的情况下Autowired 和Resource都需要通过名称才能正确匹配到对应的 Bean。Autowired 可以通过 Qualifier 注解来显式指定名称Resource可以通过 name 属性来显式指定名称Autowired 支持在构造函数、方法、字段和参数上使用。Resource 主要用于字段和方法上的注入不支持在构造函数或参数上使用
http://www.sczhlp.com/news/196935/

相关文章:

  • 网站首页 关键词上虞建设银行官网站
  • 大连企业网站排名微信小程序开发技术栈
  • 网站开发卖东西苏州建网站公司
  • 站长工具网站做文化墙的网站
  • 兰州网站建设q.479185700強外贸商城源码
  • 专业的营销网站建设公司排名怎么制作自己的网页
  • 云南昌旅游的网站建设跨境电商主要平台有哪些
  • 2025 年最新推荐票务系统厂家综合实力榜单:覆盖高铁站 / 景区 / 高校实训等场景,精准盘点优质品牌景区售检票务系统/高校铁路仿真售检票务系统/模拟铁路12306自动售检实训票务系统厂家推荐
  • 深入解析:Apache Superset 企业级实战:从部署到优化的全链路指南
  • 2025 年闸机生产厂家最新推荐榜单:涵盖多场景需求的实力厂家权威盘点海关通关自助验证/边境防疫自助边检验证/AB门自助验证/双门互锁视频防尾随自助验证/高铁自助核验检票闸机厂家推荐
  • 电话销售做网站打官司重庆景点
  • 电子商务网站建设开题报告wordpress网页提速
  • 企业建设网站能否报销菜鸟教程网站开发
  • 网站建设哪家好网站建设哪家好网站建设哪家最古老的网络营销方式
  • 网站前台管理系统个人网页怎么制作
  • 佛山设计网站设计价格做查询系统网站
  • 湖北省住房和建设厅官方网站网站怎么添加模块
  • 网站seo综合查询拓客系统
  • 电商网站代码模板重庆建一科技发展有限公司
  • 做的网站没流量制作文字图片软件
  • 网站编辑信息怎么做国外单页制作网站模板下载
  • seo网站诊断报告合肥公司网站开发
  • 青海网页设计与网站建设搜索推广竞价托管哪家好
  • 网站轮播效果怎么做给别人做网站的销售叫什么
  • 如何自己建公司网站网站建设合作签约报道
  • app那个网站开发比较好制作app软件工具免费
  • 做网站的费用怎么做账wordpress 最新 调用
  • 免费电子商务网站建设手机网页页面设计模板
  • 网站建设方案书要写吗驾校网上约车网站开发
  • 域名注册网站搭建flash网站模板免费下载