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

好看的网站排版wordpress页面链接跳转

好看的网站排版,wordpress页面链接跳转,wordpress打开速度慢,出入郑州最新通知今天问的都是基础知识#xff0c;主要是三个部分#xff1a;计网#xff0c;数据库#xff0c;java。计网答得挺好#xff0c;数据答得一般#xff0c;Java答得一坨。 目录 1.TCP/IP协议的5层模型 2.3次握手和4次挥手 3.操作系统中的进程和线程的区别 4.lunix top 命令看…问的都是基础知识主要是三个部分计网数据库java。计网答得挺好数据答得一般Java答得一坨。 目录 1.TCP/IP协议的5层模型 2.3次握手和4次挥手 3.操作系统中的进程和线程的区别 4.lunix top 命令看到的是进程还是线程 5.http协议的post和get有什么区别 6.http协议有哪几块内容 7.几个状态码对应的含义 8.数据库事务的隔离级别 9.主键索引和非主键索引有什么区别聚集索引和二级索引 10.非主键索引一定要回表吗 11.String以及StringBuilder和StringBuffer的区别 12.HashMap的数据结构 13.hashMap什么时候线程不安全 14.讲讲concurrentHashMapJDK1.8之后 15.实现多线程的方法 16.结合线程池的几个核心参数讲一个线程提交到线程池中的一个过程 1.核心参数 2.线程任务提交到线程池的过程 17.如何保证缓存中的数据和数据库中的数据是一致的 缓存更新策略 重试机制 异步更新 缓存过期策略 分布式锁 1.TCP/IP协议的5层模型 送分题TCP/IP是物理层数据链路层网络层传输层应用层。OSI是7层“物联网输会示用” 2.3次握手和4次挥手 也是送分题我说的太详细了讲了中间的所有synackACKseq还有fin等在讲4次挥手的时候他打断了说太详细了不用讲了。 3次握手 第一次握手 TCP客户进程也是先创建传输控制块TCB然后向服务器发出连接请求报文这是报文首部中的同部位SYN1同时选择一个初始序列号 seqx 此时TCP客户端进程进入了 SYN-SENT 同步已发送状态 第二次握手 TCP服务器收到请求报文后如果同意连接则会向客户端发出确认报文。确认报文中应该 ACK1SYN1确认号是ackx1同时也要为自己初始化一个序列号 seqy此时TCP服务器进程进入了 SYN-RCVD 同步收到状态 第三次握手 TCP客户端收到确认后还要向服务器给出确认。确认报文的ACK1acky1自己的序列号seqx1此时TCP连接建立客户端进入ESTABLISHED已建立连接状态 触发三次握手 4次挥手 第一次挥手 客户端发出连接释放报文并且停止发送数据。释放数据报文首部FIN1其序列号为sequ等于前面已经传送过来的数据的最后一个字节的序号加1此时客户端进入FIN-WAIT-1终止等待1状态 第二次挥手 服务器端接收到连接释放报文后发出确认报文ACK1acku1并且带上自己的序列号seqv此时服务端就进入了CLOSE-WAIT 关闭等待状态 第三次挥手 客户端接收到服务器端的确认请求后客户端就会进入FIN-WAIT-2终止等待2状态等待服务器发送连接释放报文服务器将最后的数据发送完毕后就向客户端发送连接释放报文服务器就进入了LAST-ACK最后确认状态等待客户端的确认。 第四次挥手 客户端收到服务器的连接释放报文后必须发出确认ACK1ackw1而自己的序列号是sequ1此时客户端就进入了TIME-WAIT时间等待状态但此时TCP连接还未终止必须要经过2MSL后最长报文寿命当客户端撤销相应的TCB后客户端才会进入CLOSED关闭状态服务器端接收到确认报文后会立即进入CLOSED关闭状态到这里TCP连接就断开了四次挥手完成 3.操作系统中的进程和线程的区别 根本区别进程是操作系统资源分配的基本单位而线程是处理器任务调度和执行的基本单位 资源开销每个进程都有独立的代码和数据空间程序上下文程序之间的切换会有较大的开销线程可以看做轻量级的进程同一类线程共享代码和数据空间每个线程都有自己独立的运行栈和程序计数器PC线程之间切换的开销小。 包含关系如果一个进程内有多个线程则执行过程不是一条线的而是多条线线程共同完成的线程是进程的一部分所以线程也被称为轻权进程或者轻量级进程。 内存分配同一进程的线程共享本进程的地址空间和资源而进程之间的地址空间和资源是相互独立的 影响关系一个进程崩溃后在保护模式下不会对其他进程产生影响但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。 执行过程每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行必须依存在应用程序中由应用程序提供多个线程执行控制两者均可并发执行 4.lunix top 命令看到的是进程还是线程 top命令看到的是进程top -h -pid 看到的pid进程下的线程 5.http协议的post和get有什么区别 目的和用途 GET 方法主要用于从指定的资源请求数据。它通常用于获取数据而不是发送数据。 POST 方法主要用于将数据发送到服务器以创建或更新资源。它通常用于提交表单或上传文件。 数据发送 GET 请求的数据通常附加在 URL 的查询字符串中这意味着数据会暴露在 URL 中长度也有限制通常是 URL 长度限制而不是数据本身的限制。 POST 请求的数据包含在请求体中这意味着数据不会暴露在 URL 中更加安全。此外POST 请求没有长度限制虽然服务器和客户端可能会有限制。 幂等性 GET 请求是幂等的即多次执行相同的 GET 请求不会产生不同的结果除非资源本身发生了变化。 POST 请求通常不是幂等的因为每次发送 POST 请求都可能会创建新的资源或更新现有资源。 缓存 GET 请求可以被缓存这有助于减少网络流量并提高性能。 POST 请求通常不会被缓存因为它们通常用于修改数据。 安全性 GET 请求由于数据在 URL 中所以不适合传输敏感信息因为它可能被记录在浏览器历史、服务器日志或代理服务器中。 POST 请求通过请求体发送数据因此更加安全适合传输敏感信息。但是这并不意味着 POST 请求本身更加安全因为还需要其他安全措施如 HTTPS来保护数据。 书签和收藏夹 GET 请求的 URL 可以被书签或收藏夹保存方便用户以后再次访问。 POST 请求的 URL 通常不包含用户提交的数据因此无法直接通过书签或收藏夹保存。 6.http协议有哪几块内容 包括请求行请求头请求体。 请求行Request Line 方法如 GET、POST、PUT、DELETE等指定要执行的操作。请求 URI统一资源标识符请求的资源路径通常包括主机名、端口号如果非默认、路径和查询字符串。HTTP 版本如 HTTP/1.1 或 HTTP/2。 请求行的格式示例GET /index.html HTTP/1.1 请求头Request Headers 包含了客户端环境信息、请求体的大小如果有、客户端支持的压缩类型等。常见的请求头包括Host、User-Agent、Accept、Accept-Encoding、Content-Length等。 请求体可选 在某些类型的HTTP请求如 POST 和 PUT中请求体包含要发送给服务器的数据。 7.几个状态码对应的含义 200请求成功 处理方式获得响应的内容进行处理 302请求到的资源在一个不同的URL处临时保存 处理方式重定向到临时的URL 404没有找到 处理方式丢弃 503服务出错 由于临时的维护或者过载服务器当前无法处理请求。这个状况是临时的并且将在一段时间以后恢复。 参考http 请求包含哪几个部分分别有何作用_后端开发 最关注的是请求的哪部分-CSDN博客 8.数据库事务的隔离级别 数据库事务隔离级别是为了解决多个事务并发执行时可能出现的问题如脏读、不可重复读和幻读等。SQL标准定义了四种隔离级别它们分别是 Read Uncommitted读未提交这是最低的隔离级别允许事务读取尚未提交的数据变更可能会导致脏读。 Read Committed读已提交这个级别保证一个事务只能看见已经提交事务所做的改变但不可重复读仍可能发生。 Repeatable Read可重复读这是MySQL的默认事务隔离级别它确保在同一事务中多次读取相同数据时结果是一致的但可能会导致幻读。 Serializable可串行化这是最高的隔离级别通过强制事务排序使之不可能相互冲突从而解决幻读问题。但这会导致性能问题因为它可能导致大量的超时和锁竞争。 9.脏读和幻读 脏读一个事务读取另一个未提交事务的数据。 不可重复读在一个事务内多次读取同一数据集合时由于其他事务的修改导致多次读取的结果不一致。 幻读在一个事务内执行两次查询第二次查询结果中包含了第一次查询中未出现的数据或者缺少了原有的数据。 9.主键索引和非主键索引有什么区别聚集索引和二级索引 存储结构 主键索引在 InnoDB 存储引擎中主键索引采用聚簇索引Clustered Index的存储方式。聚簇索引的特点是数据行和索引项是存储在一起的索引的叶子节点直接包含了完整的数据记录。 非主键索引非主键索引通常采用非聚簇索引Non - Clustered Index的存储方式。非聚簇索引的叶子节点存储的是索引列的值以及对应的主键值而不是完整的数据记录。 查询效率 主键索引对于基于主键的查询主键索引的查询效率非常高因为可以直接通过聚簇索引定位到数据行无需进行二次查找。 非主键索引对于基于非主键索引列的查询首先需要在非主键索引中查找对应的主键值然后再通过主键值在主键索引中查找完整的数据记录这个过程称为回表。因此非主键索引的查询效率相对较低尤其是在需要查询大量数据时回表操作会增加额外的开销。 唯一性 主键索引主键索引具有唯一性约束即主键列中的值必须是唯一的且不能为 NULL。这是为了确保每一行记录都能被唯一标识。 非主键索引非主键索引的创建和维护相对简单因为它不影响数据行的物理存储顺序。在插入、更新和删除数据时只需要更新非主键索引的索引项而不需要移动数据行。但是过多的非主键索引会占用额外的存储空间并且在数据更新时需要同时更新多个索引也会增加一定的维护成本。 10.非主键索引一定要回表吗 不一定在大多数情况下当使用非主键索引进行查询且查询的列不包含在该非主键索引中时就需要进行回表操作当查询的列都包含在非主键索引中时就不需要进行回表操作这种查询被称为索引覆盖查询。覆盖索引是查询使用了索引返回的列必须在索引中能够全部找到。 11.String以及StringBuilder和StringBuffer的区别 String是不可变类。这意味着一旦创建了String对象它的内容就不能再被修改。每次对字符串的修改操作实际上都会生成一个新的字符串对象而不会改变原有的对象。这种不可变性提供了较高的安全性和性能优化但在频繁操作字符串时会导致大量的临时对象生成影响性能。 StringBuffer是一个可变类用于构建和修改字符串。与String不同StringBuffer允许在不创建新对象的情况下修改字符串的内容。此外StringBuffer是线程安全的这意味着它的所有方法都是同步的多个线程可以安全地操作同一个StringBuffer对象而不会发生数据竞争。 StringBuilder也是一个可变类允许在不生成新对象的情况下修改字符串。StringBuilder和StringBuffer的主要区别在于StringBuilder是非线程安全的它的操作不是同步的不能保证多线程环境中的安全性。但正因为没有同步开销StringBuilder在单线程环境中的性能优于StringBuffer。 string不可变是因为底层是一个final修饰的char数组并且没有对外提供修改方法拼接替换等方法实际是创建了一个新的数组。不变性可以做到多线程线程安全而且hashcode不变使用String作为哈希表的键时能够提高性能。 StringBuilder 和 StringBuffer 都继承自 AbstractStringBuilder 类它们内部同样使用一个字符数组 value 来存储字符串内容但这个数组没有被 final 修饰并且提供了一些方法可以修改数组中的内容如 append()、insert()、delete() 等这些方法可以直接修改内部字符数组 value 中的内容而不需要创建新的对象除非容量不足时进行扩容。目的是为了在需要频繁修改字符串内容的场景下提高性能。如果使用 String 进行频繁的字符串拼接等操作会产生大量的临时对象导致频繁的垃圾回收影响性能。而 StringBuilder 和 StringBuffer 可以直接在原对象上进行修改避免了创建大量临时对象的开销。 12.HashMap的数据结构 数组加链表当链表长度大于8数组长度大于64链表会变成红黑树。 13.hashMap什么时候线程不安全 1、put的时候导致的多线程数据不一致。 比如有两个线程A和B首先A希望插入一个key-value对到HashMap中首先计算记录所要落到的桶的索引坐标然后获取到该桶里面的链表头结点此时线程A的时间片用完了而此时线程B被调度得以执行和线程A一样执行只不过线程B成功将记录插到了桶里面假设线程A插入的记录计算出来的桶索引和线程B要插入的记录计算出来的桶索引是一样的那么当线程B成功插入之后线程A再次被调度运行时它依然持有过期的链表头但是它对此一无所知以至于它认为它应该这样做如此一来就覆盖了线程B插入的记录这样线程B插入的记录就凭空消失了造成了数据不一致的行为。 2、在扩容的时候jdk1.8之前是采用头插法当两个线程同时检测到hashmap需要扩容在进行同时扩容的时候有可能会造成链表的循环主要原因就是采用头插法新链表与旧链表的顺序是反的在1.8后采用尾插法就不会出现这种问题同时1.8的链表长度如果大于8就会转变成红黑树。 14.讲讲concurrentHashMapJDK1.8之后 摒弃了分段锁机制采用 CASCompare - And - Swap和 synchronized 来保证并发操作的线程安全性。数据结构上采用数组 链表 红黑树与 JDK 1.8 的 HashMap 类似。 CAS在初始化数组、扩容等操作中使用 CAS 操作。CAS 是一种无锁算法它通过比较内存中的值和预期值是否相等如果相等则更新内存中的值否则重试。例如在初始化数组时使用 CAS 操作来确保只有一个线程可以成功初始化数组。synchronized在插入、删除和查找操作中当需要对某个桶进行操作时使用 synchronized 关键字对该桶进行加锁。由于只对单个桶加锁不同的线程可以同时访问不同的桶从而实现高并发。 jdk1.8之前是在整个put方法上加synthornized而jdk1.8之后是在方法里面当发生冲突的那一段代码加锁。 put方法 做插入操作时首先进入乐观锁 然后在乐观锁中判断容器是否初始化 如果没初始化则初始化容器 如果已经初始化则判断该hash位置的节点是否为空如果为空则通过CAS操作进行插入。 如果该节点不为空再判断容器是否在扩容中如果在扩容则帮助其扩容。 如果没有扩容则进行最后一步先加锁然后找到hash值相同的那个节点(hash冲突) 循环判断这个节点上的链表决定做覆盖操作还是插入操作。 循环结束插入完毕。 get方法 看上面这代码ConcurrentHashMap的get()方法是不加锁的为什么可以不加锁因为table有volatile关键字修饰保证每次获取值都是最新的。 参考ConcurrentHashMap原理详解(太细了)-CSDN博客 15.实现多线程的方法 1. 继承Thread类 2. 实现Runnable接口 3. 实现Callable接口 JDK1.5 4. 线程池方式创建 16.结合线程池的几个核心参数讲一个线程提交到线程池中的一个过程 1.核心参数 ThreadPoolExecutor 的构造函数如下 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueueRunnable workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) corePoolSize核心线程数。线程池在初始化时会创建一定数量的核心线程这些线程在空闲时也不会被销毁会一直存活在线程池中等待任务的到来。maximumPoolSize最大线程数。线程池允许创建的最大线程数量。当核心线程都在执行任务且任务队列已满时线程池会创建新的线程直到线程数量达到最大线程数。keepAliveTime线程空闲时间。当线程池中的线程数量超过核心线程数时多余的线程在空闲一段时间后会被销毁这段空闲时间就是 keepAliveTime。unitkeepAliveTime 的时间单位例如 TimeUnit.SECONDS 表示秒。workQueue任务队列。用于存储等待执行的任务。当核心线程都在忙碌时新提交的任务会被放入这个队列中等待执行。常见的任务队列有 ArrayBlockingQueue、LinkedBlockingQueue 等。threadFactory线程工厂用于创建线程。可以通过自定义线程工厂来设置线程的名称、优先级等属性。handler拒绝策略。当任务队列已满且线程池中的线程数量达到最大线程数时新提交的任务会触发拒绝策略。常见的拒绝策略有 AbortPolicy直接抛出异常、CallerRunsPolicy由提交任务的线程自己执行等。 2.线程任务提交到线程池的过程 假设我们创建了一个线程池代码如下 import java.util.concurrent.*;public class ThreadPoolExample {public static void main(String[] args) {ThreadPoolExecutor executor new ThreadPoolExecutor(2, // 核心线程数5, // 最大线程数60, // 线程空闲时间TimeUnit.SECONDS, // 时间单位new LinkedBlockingQueue(3), // 任务队列Executors.defaultThreadFactory(), // 线程工厂new ThreadPoolExecutor.AbortPolicy() // 拒绝策略);// 提交任务for (int i 0; i 10; i) {final int taskId i;executor.submit(() - {System.out.println(Executing task taskId by thread Thread.currentThread().getName());try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}});}// 关闭线程池executor.shutdown();} } 检查核心线程数当一个新任务提交到线程池时线程池首先会检查当前线程数量是否小于核心线程数corePoolSize。如果是线程池会创建一个新的核心线程来执行该任务。在上述示例中最初提交的 2 个任务会分别由 2 个新创建的核心线程来执行。放入任务队列如果当前线程数量已经达到核心线程数新任务会被放入任务队列workQueue中等待执行。在示例中当提交第 3、4、5 个任务时由于核心线程数为 2这 3 个任务会被放入 LinkedBlockingQueue 中等待。创建新线程如果任务队列已满且当前线程数量小于最大线程数maximumPoolSize线程池会创建一个新的非核心线程来执行该任务。在示例中当提交第 6、7、8 个任务时由于任务队列已满队列容量为 3且最大线程数为 5线程池会创建 3 个新的非核心线程来执行这 3 个任务。触发拒绝策略如果任务队列已满且当前线程数量已经达到最大线程数新提交的任务会触发拒绝策略handler。在示例中当提交第 9、10 个任务时由于任务队列已满且线程数量已达到最大线程数 5会触发 AbortPolicy 拒绝策略直接抛出 RejectedExecutionException 异常。线程空闲处理当线程完成任务后如果线程数量超过核心线程数且该线程空闲时间超过 keepAliveTime这个多余的线程会被销毁以释放系统资源。 17.如何保证缓存中的数据和数据库中的数据是一致的 缓存更新策略 1.先更新数据库再更新缓存这种策略是先更新数据库中的数据更新成功后再去更新缓存里对应的数据,不过它存在并发问题多个线程同时更新时可能会使缓存更新顺序混乱最终导致缓存数据状态错误。比如两个线程同时更新同一条数据就可能出现后更新数据库的线程先更新了缓存造成数据不一致。它比较适用于对缓存更新实时性要求不高并且写操作较少的场景。 2.先删除缓存再更新数据库:执行数据更新操作时先把缓存里对应的数据删除再去更新数据库。后续请求获取数据时若发现缓存中无数据就会从数据库读取最新数据并更新到缓存。在高并发场景下会有短暂的数据不一致情况。例如一个线程删除缓存后还没更新数据库另一个线程读取数据就会把数据库里的旧数据更新到缓存等第一个线程更新完数据库缓存数据就成旧的了。适合读多写少的场景因为频繁的读操作能及时把最新数据更新到缓存。 重试机制 1.本地重试:当更新数据库成功但删除缓存失败时在本地进行多次重试。可以用循环和计数器实现设置最大重试次数达到次数仍失败就记录日志或做其他处理。 2.消息队列重试:删除缓存失败时把删除任务发到消息队列有专门的消费者处理。若处理失败任务会重新放回队列直到成功或达到最大重试次数。能避免本地重试阻塞业务线程提高系统吞吐量。 异步更新 数据库变更监听:通过监听数据库的变更日志像 MySQL 的 binlog。数据库数据变更时触发缓存更新或删除操作。比如用 Canal 工具监听 MySQL 的 binlog把变更信息发到消息队列由消费者处理缓存。能实现数据库和缓存的异步更新降低业务代码复杂度保证数据最终一致性。 缓存过期策略 合理设置缓存过期时间:给缓存数据设置合理的过期时间过期后下次请求会从数据库获取最新数据更新缓存。过期时间要根据业务需求和数据更新频率确定太短会频繁读数据库影响性能太长则数据不一致时间会延长。 分布式锁 读写锁:进行读写操作时用读写锁保证同一时间只有一个线程能写多个线程可以同时读。写操作先获取写锁更新数据库和缓存后释放读操作获取读锁读取数据后释放。能避免并发读写导致的数据不一致提升系统并发性能。
http://www.dnsts.com.cn/news/182833.html

相关文章:

  • 国内外优秀网站怎样做聊天网站
  • 做棋牌游戏网站犯法吗建设厅网站举报
  • 齐齐哈尔城市建设档案馆网站全国村级网站建设
  • 国外html5模板网站wordpress都是不安全模块
  • 什么是电子商务网站推广最新猪价
  • 宿迁网站网站建设网站三大要素是什么意思
  • 服务器上怎么做网站网站平台开发要注意什么问题
  • 建设银行网站为什么登不上网页设计素材表格
  • 互动网站建设angularjs 做电商网站
  • 做简历的网站viso网站设计的目的
  • dede 网站建设模板长沙公众号开发
  • 餐馆网站怎么做自己创建网站怎么赚钱
  • 网站栏目怎么做301定向做网站图片多少钱
  • 浙江网站制作公司wordpress如何换图片不显示
  • 大型网站 建设意义wordpress的栏目页关键词怎么设置
  • wordpress云建站系统网站开发毕业设计文档
  • 泉州网站排名优化加大整合力度网站集约建设
  • 网站与网页设计教程企业网站建设技术
  • 免费自己制作网站方法c语言开发工具
  • 门户网站推广优势cad精品课网站建设
  • php网站开发费用成全高清免费观看mv
  • 推荐个好看的网站小企业网站建设系统哪个好
  • 苏州网站建设 凡仕臣网络seo网站快排
  • 农产品网站建设投标书好看的网站设计网站
  • 做期权关注哪个网站新闻软文怎么写
  • 门户网站盈利模式wordpress主动提交
  • 营销型网站公司教育网站模板
  • 网站怎么提高权重最好的产品网站建设
  • 东莞好的网站建设效果江门网站制作培训
  • 做性视频网站有哪些设计接单网站大全