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

网站开发工具选用原则建立网站服务的公司网站

网站开发工具选用原则,建立网站服务的公司网站,长沙做网站公司哪家,老牛wordpress职场新星#xff1a;Java面试干货让你笑傲求职路 1、token 为什么存放在 redis 中#xff1f;2、索引的底层原理是什么#xff1f;3、Spring IOC和AOP的原理4、接口和抽象类有什么共同点和区别#xff1f;5、为什么要使用线程池#xff1f;直接new个线程不好吗#xff1f… 职场新星Java面试干货让你笑傲求职路 1、token 为什么存放在 redis 中2、索引的底层原理是什么3、Spring IOC和AOP的原理4、接口和抽象类有什么共同点和区别5、为什么要使用线程池直接new个线程不好吗6、 线程池的核心属性有哪些7、线程池中的各个状态分别代表什么含义8、线程池有哪些队列9、线程池有哪些拒绝策略10、Executors 提供了哪些创建线程池的方法 1、token 为什么存放在 redis 中 答Token 是一种身份验证机制用于验证用户的身份。在Web应用程序中通常使用token来保护用户的敏感信息和操作。将token存储在Redis可以提供以下优点 快速访问Redis是内存数据库读取速度非常快。这意味着通过Redis存储的token可以快速访问从而提高了应用程序的性能。分布式环境下的共享在分布式环境中多个服务器可能需要访问同一个token。将token存储在Redis中可以使不同的服务器共享同一个token从而确保应用程序的一致性。自动过期Redis支持设置过期时间可以让token在一段时间后自动过期。这可以防止token被滥用和保护用户的安全。可以进行监控和管理Redis提供了监控和管理工具可以帮助开发人员查看token的使用情况和管理token的过期时间。 2、索引的底层原理是什么 答索引index是能够帮助数据库提升查询效率的一种数据结构。换一种易懂的说法索引是一种数据结构他的作用是使数据库查询数据更快。 数据库对于索引的处理过程 在我们为表的某个字段设置索引之后数据库会将该字段数据复制并将复制的数据以某种数据结构重新排列保存为索引文件。当使用索引字段做查询条件对该表进行查询操作的时候数据库会打开索引文件并通过其中的数据结构来快速定位目标数据。 索引应用的数据结构 B TREEBalance tree、BTREE B TREE和BTREE是一种优化关系B TREE先出现通过对它的优化设计产生了BTREE。 B TREE 上图为一个B TREE的结构示例下面对B TREE中的元素逐一说明需要结合图片理解 1、阶阶表示B TREE的层数横向那么B TREE为3阶平衡树 2、节点每一个节点都是一个方块位于最顶部的叫做根节点最底部是叶子结点其他的叫中间节点。每个节点中包含下列元素 数字K关键字存放索引字段 DataD关键字对应详细数据Data 指针P指向下方子节点 BTree的特点 1、叶子结点无P指针 2、指针P和关键字K交叉排序所以每个节点中的指针P一定比关键字K多一个 3、关键字从左到右有序排列K后的序号顺序 4、所有子节点的关键字范围不得超过指针对应父节点左右两侧关键字的范围。 5、所有叶子节点的深度阶数相同 6、所有节点的关键字不重复关键字可能不必走到叶子节点即可命中Data 通过Btree的结构可以分析出B TREE以类似二分的结构通过范围过滤的算法来提高查询效率当关键字在某节点命中后获取该K的data来返回查询结果这就是索引的底层原理。 B TREE BTREE是基于B TREE的一种增强设计 BTREE的特点 1、节点中关键字x与指针p个数相同 2、目标数据只有到达叶子节点才会命中data数据只存在于叶子节点也就是说使用BTREE的索引一定会走到叶子节点 3、每个叶子节点增加一个指针按顺序指向相邻叶子节点提升区间访问性能 以上就是索引采用的两种底层数据结构目前数据库产品的索引大都基于这两种数据结构接下来以MYSQL为例看一下索引的应用实例 MySQL索引实现 mysql中的索引是采用BTREE实现的。另外在mysql中有一个存储引擎的概念可以理解为mysql存数据的一个中间处理器。 MyISAM在MyISAM存储引擎中索引的实现逻辑是在BTREE的叶子节点存放着对应记录的内存地址D然后再通过该地址D关联对应表数据以获取消息数据这种设计方式实现的索引叫做“非聚合索引”InnoDB与MyISAM最核心的区别是在InnoDB存储引擎中叶子节点直接存放了数据详细信息也就是说InnoDB直接将表数据本身做成了BTREE数据结构由于不需要再查一次表数据这使得查询速度更快这种设计方式实现的索引叫做“聚合索引”。 3、Spring IOC和AOP的原理 答1、IOC控制反转程序之间解耦在类和类之间存在控制权控制权指的是对象的创建和使用 比如说有类A和类B我们之前的做法是在A中调用B那么控制权就在A中这样做的耦合度高如果修改了BA也要做相应修改。引入Spring框架后控制权由Spring容器来负责。当A想使用B时需要由Spring容器通过配置文件进行注入。这种思想就是ioc将对象的创建和使用控制权转移到了Spring容器由Spring容器来控制。 2、AOP面向切面编程Struts2的拦截器就是使用AOP的思想。使用AOP来管理事务事务处理、日志管理、权限控制等。Spring AOP就是基于动态代理的如果要代理的对象实现了某个接口那么AOP会使用JDK Proxy去创建代理对象而对于没有实现接口的对象就无法使用JDK proxy去进行代理而是会使用Cglib Proxy来生成一个被代理对象的子类作为代理。 4、接口和抽象类有什么共同点和区别 答 共同点 都不能被实例化。都可以包含抽象方法。都可以有默认实现的方法Java 8 可以用 default 关键字在接口中定义默认方法。 区别 接口主要用于对类的行为进行约束你实现了某个接口就具有了对应的行为。抽象类主要用于代码复用强调的是所属关系。一个类只能继承一个类但是可以实现多个接口。接口中的成员变量只能是 public static final 类型的不能被修改且必须有初始值而抽象类的成员变量默认 default可在子类中被重新定义也可被重新赋值。 5、为什么要使用线程池直接new个线程不好吗 答如果我们在方法中直接new一个线程来处理当这个方法被调用频繁时会创建很多线程不仅会消耗系统资源还会降低系统的稳定性。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时任务可以不需要等到线程床就能立即执行。增加线程的可管理性。线程是稀缺资源使用线程池可以进行统一分配调优和监控。 6、 线程池的核心属性有哪些 答 threadFactory线程工厂用于创建工作线程的工厂。corePoolSize核心线程数当线程池运行的线程少于- corePoolSize 时将创建一个新线程来处理请求即使其他工作线程处于空闲状态。 workQueue队列用于保留任务并移交给工作线程的阻塞队列。maximumPoolSize最大线程数线程池允许开启的最大线程数。handler拒绝策略往线程池添加任务时将在下面两种情况出发拒绝策略1线程池运行状态不是RUNNING2:线程池已经达到最大线程数并且阻塞队列已满时。keepAliveTime保持存活时间如果线程池当前线程数超过 corePoolSize则多余的线程空闲时间超过 keepAliveTime 时会被终止。 7、线程池中的各个状态分别代表什么含义 答线程池目前有5个状态 RUNNING接受新任务并处理排队的任务。SHUTDOWN不接受新任务但处理排队的任务。STOP不接受新任务不处理排队的任务并中断正在进行的任务。TIDYING所有任务都已终止workerCount为零线程转换到 TIDYING 状态将运行 terminated() 钩子方法。TERMINATEDterminated() 已完成。 8、线程池有哪些队列 答常见的阻塞队列有以下几种 ArrayBlockingQueue: 基于数组结构的有界阻塞队列按先进先出对元素进行排序。 LinkedBlockingQueue基于链表结构的有界/无解阻塞队列按先进先出对元素进行排序吞吐量通常高于 ArrayBlockingQueue。Executor.newFixedThreadPool 使用了该队列。 SynchronousQueue不是一个真正的队列而是一种在线程之间移交的机制。要将一个元素放入 SynchronousQueue 中必须有另一个线程正在等待接受这个元素。如果没有线程等待并且线程池的当前大小小于最大值那么线程池将创建一个线程否则根据拒绝策略这个任务将被拒绝。使用直接移交将更高效因为任务会直接移交给执行它的线程而不是被放在队列中然后由工作线程从队列中提取任务。只有当线程池是无界的或者可以拒绝任务时该队列才有实际价值。Executor.newCachedThreadPool使用了该队列。 PriorityBlockingQueue具有优先级的无界队列按优先级对元素进行排序。元素的优先级是通过自然顺序或 Comparator 来定义的。 9、线程池有哪些拒绝策略 答常见的有以下几种 AbortPolicy中止策略。默认的拒绝策略直接抛出 RejectedExecutionException。调用者可以捕获这个异常然后根据需求编写自己的处理代码。 DiscardPolicy抛弃策略。什么都不做直接抛弃被拒绝的任务。 DiscardOldestPolicy抛弃最老策略。抛弃阻塞队列中最老的任务相当于就是队列中下一个将要被执行的任务然后重新提交被拒绝的任务。如果阻塞队列是一个优先队列那么“抛弃最旧的”策略将导致抛弃优先级最高的任务因此最好不要将该策略和优先级队列放在一起使用。 CallerRunsPolicy调用者运行策略。在调用者线程中执行该任务。该策略实现了一种调节机制该策略既不会抛弃任务也不会抛出异常而是将任务回退到调用者调用线程池执行任务的主线程由于执行任务需要一定时间因此主线程至少在一段时间内不能提交任务从而使得线程池有时间来处理完正在执行的任务。 10、Executors 提供了哪些创建线程池的方法 答 newFixedThreadPool固定线程数的线程池。corePoolSize maximumPoolSizekeepAliveTime为0工作队列使用无界的LinkedBlockingQueue。适用于为了满足资源管理的需求而需要限制当前线程数量的场景适用于负载比较重的服务器。 newSingleThreadExecutor只有一个线程的线程池。corePoolSize maximumPoolSize 1keepAliveTime为0 工作队列使用无界的LinkedBlockingQueue。适用于需要保证顺序的执行各个任务的场景。 newCachedThreadPool 按需要创建新线程的线程池。核心线程数为0最大线程数为 Integer.MAX_VALUEkeepAliveTime为60秒工作队列使用同步移交 SynchronousQueue。该线程池可以无限扩展当需求增加时可以添加新的线程而当需求降低时会自动回收空闲线程。适用于执行很多的短期异步任务或者是负载较轻的服务器。 newScheduledThreadPool创建一个以延迟或定时的方式来执行任务的线程池工作队列为 DelayedWorkQueue。适用于需要多个后台线程执行周期任务。 newWorkStealingPoolJDK 1.8 新增用于创建一个可以窃取的线程池底层使用 ForkJoinPool 实现。
http://www.hkea.cn/news/14415115/

相关文章:

  • 公墓网站建设自己建论坛
  • 网站建设开发技术天津展板模板网站
  • 网站制作三站万站霸屏
  • 上海域名icp海网站建设龙岗网站建设价位
  • it运维外包公司龙岗网站seo
  • 网站页面设计具体步骤2345游戏盒子
  • pw域名网站北京装修公司口碑
  • 上海市建设工程信息报送网站网站建设分金手指专业五
  • 网站需求分析的重要系统开发需要的技术
  • 平邑县建设局网站wordpress 微信 论坛
  • 如何做好网站宣传wordpress自动添加关键字
  • 小程序开发兼职的小知识seo整站优化的思路及步骤
  • 企业做网站有什么作用网络推广公司
  • 网站建设实验分析总结哈尔滨百度网站排名
  • 彩票网站开发与建设影视剪辑培训班
  • 建站wordpress 基础免费的seo教程
  • 银行的网站怎么做洛阳恒凯做的网站有哪些
  • 网站建设中的安全问题wordpress模板编辑
  • 建设部投诉网站信息流优化师是干什么的
  • 宝安公司网站制作哪家公司好烟台网站设计单位
  • 电子商务网站建设服务小程序appid格式
  • 做网站前端上海企业招聘信息
  • 网站图片翻页怎么做北京建设银行网站首页
  • 网站企业制作做一个代驾小程序要多少钱
  • 网站开发和游戏开发移动网站建设厂家
  • 跨境电商网站建设成本网络规划设计师教程第二版电子书
  • 秀山微信网站建设免费咨询皮肤医生
  • 网站体验步骤wordpress 自定义注册
  • 如何在自己网站添加链接哪里有做网站服务商
  • 做网站可以参考的网站深圳网站设计小程序