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

基于php电子商务网站开发西安企业建站公司

基于php电子商务网站开发,西安企业建站公司,电子商务网站开发需求分析,免费网站可以做淘宝客吗#x1f496; 前言 #x1f469;‍#x1f3eb; 参考地址 #x1f496; 操作系统 1. 进程和线程的区别 本质区别 进程是操作系统资源分配的基本单位线程是任务调度和执行的基本单位 开销方面 每个进程都有独立的代码和数据空间#xff08;程序上下文#xff09;#… 前言 ‍ 参考地址 操作系统 1. 进程和线程的区别 本质区别 进程是操作系统资源分配的基本单位线程是任务调度和执行的基本单位 开销方面 每个进程都有独立的代码和数据空间程序上下文程序之间的切换会有较大的开销线程可以看作是轻量级的进程同一类线程共享代码和数据空间每个线程都有自己独立的运行栈和程序计数器PC线程之间切换的开销小 稳定性方面 进程中的子进程崩溃并不会影响其他进程进程中某个线程崩了整个进程可能也会崩掉 内存分配方面 系统在运行的时候会为每个进程分配不同的内存空间而对线程而言除了CPU外系统不会为线程分配内存线程所使用的资源来自其所属进程的资源线程组之间只能共享资源 包含关系 没有线程的进程可以看做是单线程的如果一个进程内有多个线程则执行过程不是一条线的而是多条线线程共同完成的线程是进程的一部分所以线程也被称为轻权进程或者轻量级进程 2. 为什么进程崩溃不会对其他进程产生很大影响 进程隔离性每个进程都有自己独立的内存空间当一个进程崩溃时其内存空间会被操作系统回收不会影响其他进程的内存空间。这种进程间的隔离性保证了一个进程崩溃不会直接影响其他进程的执行。进程独立性每个进程都是独立运行的它们之间不会共享资源如文件、网络连接等。因此一个进程的崩溃通常不会对其他进程的资源产生影响。 数据结构 1. 排序算法 | 时间复杂度 冒泡排序 通过相邻元素的比较和交换每次将最大或最小的元素逐步“冒泡”到最后或最前。⏰时间复杂度最好情况下O( n n n)最坏情况下O( n 2 n^2 n2)平均情况下O( n 2 n^2 n2)空间复杂度O(1) 插入排序 将待排序元素逐个插入到已排序序列的合适位置形成有序序列。⏰时间复杂度最好情况下O( n n n)最坏情况下O( n 2 n^2 n2)平均情况下O( n 2 n^2 n2)空间复杂度 选择排序 通过不断选择未排序部分的最小或最大元素并将其放置在已排序部分的末尾或开头。⏰时间复杂度最好情况下O( n 2 n^2 n2)最坏情况下O( n 2 n^2 n2)平均情况下O( n 2 n^2 n2)空间复杂度O(1) 快速排序 通过选择一个基准元素将数组划分为两个子数组使得左子数组的元素都小于或等于基准元素右子数组的元素都大于或等于基准元素然后对子数组进行递归排序。⏰时间复杂度最好情况下O( n l o g 2 n nlog_2n nlog2​n)最坏情况下O( n 2 n^2 n2)平均情况下O( n l o g 2 n nlog_2n nlog2​n)空间复杂度最好情况下O( l o g 2 n log_2n log2​n)最坏情况下O( n n n) 归并排序 将数组不断分割为更小的子数组然后将子数组进行合并合并过程中进行排序⏰时间复杂度O( n l o g 2 n nlog_2n nlog2​n)空间复杂度O(n) 堆排序 通过将待排序元素构建成一个大根堆或小根堆然后将堆顶元素与末尾元素交换再重新调整堆重复该过程直到排序完成。⏰时间复杂度O( n l o g 2 n nlog_2n nlog2​n)空间复杂度O(1) 2. 归并排序和快速排序的使用场景 归并是稳定排序适合需要排序稳定的场景快速排序是不稳定排序不适合需要排序稳定的场景。快速排序是目前基于比较的内部排序中被认为是最好的方法当待排序的关键字是随机分布时快速排序的平均时间最短 3. 排序稳定是什么意思 排序稳定指的是在排序过程中对于具有相同排序关键字的元素在排序后它们的相对位置保持不变。换句话说如果在排序前两个元素 A 和 B 的值相等并且 A 在 B 的前面那么在排序后 A 仍然在 B 的前面这样的排序就是稳定排序。稳定排序保持了相同元素之间的顺序关系适用于需要保持原始顺序的场景。 4. 稳定和不稳定排序算法有什么特点 ① 稳定 相同元素的相对位置不会改变排序后仍然保持原始顺序适用于需要保持元素间相对顺序关系的场景如按照年龄排序后按姓名排序 ② 不稳定 相同元素的相对位置可能会改变排序后不保证原始顺序可能会更快但不适用于需要保持元素间相对顺序关系的场景 MySQL 1. MySQL 的存储引擎有哪些为什么常用InnoDB ① MySQL 常用的存储引擎 InnoDB 支持事务支持外键支持崩溃修复和并发控制如果需要对事务的完整性要求比较高比如银行要求实现并发控制比如秒杀抢购如果需要频繁的更新、删除操作的数据库也可以选择InnoDB因为支持事务的提交commit和回滚rollback。 MyISAM 插入数据快空间和内存使用比较低如果表主要是用于插入新记录和读出记录那么选择MyISAM能实现处理高效率 MEMORY 所有的数据都在内存中数据的处理速度快但是安全性不高如果需要很快的读写速度对数据的安全性要求较低可以选择MEMOEY它对表的大小有要求不能建立太大的表。所以这类数据库只使用在相对较小的数据库表如果只是临时存放数据数据量不大并且不需要较高的数据安全性可以选择将数据保存在内存中的Memory引擎MySQL中使用该引擎作为临时表存放查询的中间结果 ② InnoDB的优势 支持事务最小锁的粒度是行级锁 2. B 树 和 B 树 B 树 和 B 树 都是通过多叉树的形式将树的高度变矮都非常适用于检索磁盘中的数据。 但是 MySQL 默认的存储引擎 InnoDB 采用的是 B 作为索引的数据结构原因如下 B树非叶子节点不存放实际的记录数据仅存放索引因此在数据量相同的情况下相比于非叶子节点既存索引又存记录的 B树B树的非叶子节点可以存放更多的索引因此 B树可以比 B树更加“矮胖”查询底层节点的磁盘 IO次数会更少。B树又大量的冗余节点所有非叶子节点都是冗余索引这些索引让B 树在插入和删除的效率都更高比如删除根节点时不会像 B树那样发生复杂的树的调整变化B 树叶子节点之间用链表连接了起来有利于范围查询而 B树 要实现范围查询只能通过树的遍历来完成这会涉及到多个节点的磁盘IO操作效率较低 3. 除了聚簇索引还有什么索引 二极索引非聚簇索引联合索引前缀索引唯一索引 4. 二级索引存放的有哪些数据 聚簇索引叶子节点存放的是实际数据所有完整的数据记录都存放在聚簇索引的叶子节点二级索引叶子节点存放的是主键值而不是实际数据 5. 索引失效的情况 当我们使用左或者左右模糊匹配的时候也就是 like %xx 或者 like %xx%这两种方式都会造成索引失效查询条件中对索引列使用了函数查询条件中对索引列使用了表达式计算数据类型转换MySQL 在遇到字符串和数字比较的时候会自动把字符串转为数字然后再进行比较。如果字符串是索引列而条件语句中的输入参数是数字的话那么索引列会发生隐式类型转换由于隐式类型转换是通过 CAST 函数实现的等同于对索引列使用了函数所以就会导致索引失效。联合索引要能正确使用需要遵循最左匹配原则也就是按照最左优先的方式进行索引的匹配否则就会导致索引失效。 6. 事务隔离级别有哪些 四个隔离级别如下 读未提交指一个事务还没提交时它做的变更就能被其他事务看到读已提交指一个事务提交之后它做的变更才能被其他事务看到可重复读指一个事务执行过程中看到的数据一直跟这个事务启动时看到的数据是一致的MySQL InnoDB 引擎的默认隔离级别串行化会对记录加上读写锁在多个事务对这条记录进行读写操作时如果发生了读写冲突的时候后访问的事务必须等前一个事务执行完成才能继续执行 按隔离级别高低排序如下 7. 什么情况下会出现幻读 在一个事务内多次查询某个符合查询条件的「记录数量」如果出现前后两次查询到的记录数量不一致的情况就意味着发生了「幻读」现象。 8. 事务的 MVCC 是怎么实现的 对于读提交」和「可重复读」隔离级别的事务来说它们是通过 Read View 来实现的它们的区别在于创建 Read View 的时机不同 「读提交」隔离级别是在每个 select 都会生成一个新的 Read View也意味着事务期间的多次读取同一条数据前后两次读的数据可能会出现不一致因为可能这期间另外一个事务修改了该记录并提交了事务「可重复读」隔离级别是启动事务时生成一个 Read View然后整个事务期间都在用这个 Read View这样就保证了在事务期间读到的数据都是事务启动前的记录 这两个隔离级别实现是通过「事务的 Read View 里的字段」和「记录中的两个隐藏列」的比对来控制并发事务访问同一个记录时的行为这就叫 MVCC多版本并发控制。 ‍ InnoDB行记录的三个隐藏字段 一个事务去访问记录的时候除了自己的更新记录总是可见之外还有这几种情况 如果记录的 trx_id 值小于 Read View 中的 min_trx_id 值表示这个版本的记录是在创建 Read View 前已经提交的事务生成的所以该版本的记录对当前事务可见。如果记录的 trx_id 值大于等于 Read View 中的 max_trx_id 值表示这个版本的记录是在创建 Read View 后才启动的事务生成的所以该版本的记录对当前事务不可见。如果记录的 trx_id 值在 Read View 的 min_trx_id 和 max_trx_id 之间需要判断 trx_id 是否在 m_ids 列表中 如果记录的 trx_id 在 m_ids 列表中表示生成该版本记录的活跃事务依然活跃着还没提交事务所以该版本的记录对当前事务不可见如果记录的 trx_id 不在 m_ids列表中表示生成该版本记录的活跃事务已经被提交所以该版本的记录对当前事务可见 这种通过「版本链」来控制并发事务访问同一个记录时的行为就叫 MVCC多版本并发控制。 9. 事务之间怎么避免脏读的 要解决脏读现象就要升级到**「读提交」以上的隔离级别**这样事务只能读到其他事务已经提交完成的数据而不会读到未提交事务的数据就避免脏读的问题。 Redis 1. Redis数据类型 ① 常见的五种类型 String字符串Hash哈希List列表Set集合Zset有序集合 随着 Redis 版本的更新后面又支持了四种数据类型BitMap2.2 版新增、HyperLogLog2.8 版新增、GEO3.2 版新增、Stream5.0 版新增 ② 五种基本数据类型的应用场景 String 类型的应用场景缓存对象、常规计数、分布式锁、共享 session 信息等。List 类型的应用场景消息队列但是有两个问题1. 生产者需要自行实现全局唯一 ID2. 不能以消费组形式消费数据等。Hash 类型缓存对象、购物车等。Set 类型聚合计算并集、交集、差集场景比如点赞、共同关注、抽奖活动等。Zset 类型排序场景比如排行榜、电话和姓名排序等。 ③ 新增的数据类型应用场景 BitMap2.2 版新增二值状态统计的场景比如签到、判断用户登陆状态、连续签到用户总数等HyperLogLog2.8 版新增海量数据基数统计的场景比如百万级网页 UV 计数等GEO3.2 版新增存储地理位置信息的场景比如滴滴叫车Stream5.0 版新增消息队列相比于基于 List 类型实现的消息队列有这两个特有的特性**自动生成全局唯一消息ID支持以消费组形式消费数据。** 2. 热 key 是什么怎么解决 Redis 热key是指呗频繁访问的key可能会导致单个key的访问量过大影响系统性能。解决方案包括 使用二级缓存即JVM本地缓存减少Redis的读请求对热点key进行分片将数据分散存储在不同的节点上减轻单个key的压力开启内存淘汰机制并选择使用LRUleast recently used最近最少使用算法算法来淘汰不常用的key保证内存中存储的是最热门的数据。设置key的过期时间确保key在一段时间后自动删除防止长时间占用内存 3. String 是使用什么存储的?为什么不用 c 语言中的字符串? Redis 的 String 字符串是用 SDS 数据结构存储的 len记录了字符串的长度。这样获取字符串长度的时候只需要返回这个成员变量值就行时间复杂度只需要 O1。alloc分配给字符数组的空间长度。这样在修改字符串的时候可以通过 alloc - len 计算出剩余的空间大小可以用来判断空间是否满足修改需求如果不满足的话就会自动将 SDS 的空间扩展至执行修改所需的大小然后才执行实际的修改操作所以使用 SDS 既不需要手动修改 SDS 的空间大小也不会出现前面所说的缓冲区溢出的问题。flags用来表示不同类型的SDS。一共设计了 5 种类型分别是 sdshdr5、sdshdr8、sdshdr16、sdshdr32 和 sdshdr64后面在说明区别之处。buf[]字符数组用来保存实际数据。不仅可以保存字符串也可以保存二进制数据。 总的来说Redis 的 SDS 结构在原本字符数组之上增加了三个元数据len、alloc、flags用来解决 C 语言字符串的缺陷。 优点如下 O1复杂度获取字符串 C 语言的字符串长度获取 strlen 函数需要通过遍历的方式来统计字符串长度时间复杂度是 O(N)。而 Redis 的 SDS 结构因为加入了 len 成员变量那么获取字符串长度的时候直接返回这个成员变量的值就行所以复杂度只有O(1) 二进制安全 因为 SDS 不需要用 “\0” 字符来标识字符串结尾了而是有个专门的 len 成员变量来记录长度所以可存储包含 “\0” 的数据。但是 SDS 为了兼容部分 C 语言标准库的函数 SDS 字符串结尾还是会加上 “\0” 字符。 因此 SDS 的 API 都是以处理二进制的方式来处理 SDS 存放在 buf[] 里的数据程序不会对其中的数据做任何限制数据写入的时候时什么样的它被读取时就是什么样的。 通过使用二进制安全的 SDS而不是 C 字符串使得 Redis 不仅可以保存文本数据也可以保存任意格式的二进制数据。 不会发生缓冲区溢出 C 语言的字符串标准库提供的字符串操作函数大多数比如 strcat 追加字符串函数都是不安全的因为这些函数把缓冲区大小是否满足操作需求的工作交由开发者来保证程序内部并不会判断缓冲区大小是否足够用当发生了缓冲区溢出就有可能造成程序异常结束。所以Redis 的 SDS 结构里引入了 a l l o c 和 l e n alloc 和 len alloc和len 成员变量这样 SDS API 通过 a l l o c − l e n alloc - len alloc−len 计算出剩余可用的空间大小这样在对字符串做修改操作的时候就可以由程序内部判断缓冲区大小是否足够用。而且当判断出缓冲区大小不够用时Redis 会自动将扩大 SDS 的空间大小以满足修改所需的大小。 Java 1. 编译型语言和解释型语言的区别 编译型语言在程序执行之前整个源代码会被编译成机器码或者字节码生成可执行文件。执行时直接运行编译后的代码速度快但跨平台性较差。 解释型语言在程序执行时逐行解释执行源代码不生成独立的可执行文件。通常由解释器动态解释并执行代码跨平台性好但执行速度相对较慢。 典型的编译型语言如 C、C典型的解释型语言如Python、JavaScript 2. 动态数组的实现有哪些 ArrayList和Vector都支持动态扩容都属于动态数组。 3. ArrayList 和 Vector 的比较 线程安全性 Vector 是线程安全的ArrayList 不是线程安全的 扩容策略 Vector是扩展1倍ArrayList在底层数组不够用时在原来的基础上扩展0.5倍 4. HashMap 的扩容条件是什么 Java7 的 HashMap 扩容必须满足两个条件 当前存储的元素个数大小必须 大于等于阈值当前加入的数据是否发生了 hash 冲突 Java8 中扩容只需要满足一个条件 当前存放新值的时候已有元素的个数大于等于阈值
http://www.tj-hxxt.cn/news/142295.html

相关文章:

  • 网站utf8乱码哪里可以接网站开发项目做
  • 怎么免费建立自己的网站国家城乡建设网站
  • 企业品牌网站建设报价seo电商运营是什么意思
  • php 怎么做 网站吗小说网站开发数据库
  • 志愿服务网站开发夫妻工作室网站建设
  • 网站建设与管理简介杭州医疗器械网站制作
  • 一起做网站17杭州女装青岛栈桥介绍
  • 互联网公司网站模板一级a做爰片凤凰网站
  • 大型门户网站开发教程优化网站 提高查询
  • 静态网站提交表单怎么做北京网站建设一般多少钱
  • 建外贸企业网站国际新闻快报社
  • 中专网站建设与管理就业前景建站方法
  • 网站源码素材优化大师是干什么的
  • 长沙本土网站建设公司东莞微信网站建设信息
  • 网站推广seo方法浏览器编程语言
  • 重庆好的网站建设公司wordpress主题6
  • 赣州市建设局建管科网站太原商城网站建设
  • 怎样做商城网站的推广做阿里国际网站要收费吗
  • 网站积分商城该怎么建立抖音上做我女朋友网站
  • 庆阳定制网站做网站设计图用什么软件
  • 辽宁建设厅网站首页福田市网站建设推广
  • 网站买空间英文网站有哪些
  • 吉林市城市建设管理执法局网站国际网站建设与维护
  • 做网站公司专业做装修的网站是不是骗人的
  • 网站推广花费多少钱奉贤免费网站建设
  • 王野天女明星英文seo外链发布工具
  • 贵州企业品牌网站建设企业网盘系统
  • 长清做网站莱芜警方网站官网
  • 企业网站建设推广实训报告免费网站后台模版
  • 网站建设依据郑州网络推广哪家厉害