Geek例会23年春

Geek例会23年春

Jexi Jiang Lv3

例会1

短分享:梯度下降法

  • 线性回归:预测结果值
    • 如何更好的预测:代价函数—就是衡量预测值和真实值之间的差异的关系。
    • 损失函数:有一些类似于最小二乘法例会1.1

至于前面是m分之一或2m分之一,2m分之一表示数学里的降维,可以消掉求导带来的2.

==这个降维和机器学习的降维是不一样的==

例会1.2

  • 对于多变量函数,也是一样的

    例会1.3

思考

  1. 读一下后端的一本书和q群里的网络是怎么连接的

长分享:谈谈服务器推

==本质还是客户端主动去取数据,并不是服务端主动推送==

服务器推和伪服务器推的区别是:

  • uuid:数据库 redis:特征值

  • 二维码页面每一秒都会去uuid上查找用户是否扫码

  • 短轮询:几秒就回馈请求

  • 长轮询:30s(例如)才反馈

  • websocket:基于TCP例会1.5

    • TCP全双工:同一时间,双方都可以主动向对方发送数据
    • HTTP1.1半双工:同一时间,客服端或服务端一方能主动发送数据
  • 状态码:

    常见的状态码有:

    • 200 OK:表示请求已成功处理。
    • 301 Moved Permanently:表示永久性重定向,请求的资源已被分配了新的URI。
    • 302 Found:表示临时性重定向,请求的资源临时被分配了新的URI。
    • 304 Not Modified:表示客户端发送附带条件的请求时,服务器允许访问资源,但未满足条件的情况。
    • 400 Bad Request:表示请求报文中存在语法错误或参数错误。
    • 401 Unauthorized:表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。
    • 403 Forbidden:表示对请求资源的访问被服务器拒绝了。
    • 404 Not Found:表示在服务器上没有找到请求的资源。
    • 500 Internal Server Error:表示服务器在执行请求时发生了错误。
    • 503 Service Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求。

讲法总结

  • 不要引入无关的技术概念。
  • 目录结构很重要

方向问题

  • 不要停留了在应用层,而是深入底层
  • 不要总去打比赛,多去做开源

例会1.4

  • 争取三个国奖

例会2

对象池与享元模式

对象池

  • 大量创建和销毁重复实例时,可以用对象池来储存

享元模式

  • 共享重复单元

  • 实例的相同数据封装成享元类——减少资源的浪费

    例会2.1

二者关系

  • 享元模式是一种==结构型模式==,它通过共享技术有效地支持大量细粒度对象的复用。享元模式中的“复用”可以理解为“共享使用”,在整个生命周期中,都是被所有使用者共享的,主要目的是节省空间。

  • 对象池是一种==池化技术==,它通过预先申请一片连续的内存空间,来避免频繁地进行对象创建和释放导致内存碎片。对象池中的“复用”可以理解为“重复使用”,主要目的是节省时间。在任意时刻,每一个对象,并不会被多处使用,而是被一个使用者独占,当使用完成之后,放回到池中,再由其他使用者重复利用。

  • 简而言之,享元模式和对象池的区别在于:享元模式创建的对象是共享的,对象池创建的对象是独占的;享元模式注重空间优化,对象池注重时间优化。

单线程与多线程

  • 单线程和多线程是程序中的两种执行流方式。

    • 单线程是指程序中只有一个执行流,即一次只能执行一个任务,必须等待当前任务完成后才能执行下一个任务。
    • 多线程是指程序中有多个执行流,即一次可以同时执行多个任务,或者在一个任务等待的时候切换到另一个任务执行,从而提高程序的效率和响应速度
  • 单线程的优点是编程简单,逻辑清晰,不需要考虑线程间的同步和通信问题。单线程的缺点是不能充分利用CPU资源,对于耗时或阻塞的任务会导致程序不响应或效率低下。

  • 多线程的优点是可以提高CPU的利用率,提高程序的并发性和性能,尤其在多核CPU或网络编程的场景下。多线程的缺点是编程复杂,需要考虑线程间的同步和通信问题,以及线程安全和死锁等问题。多线程也会增加内存和CPU的开销

思考

画面卡顿

  • 显卡卡顿与内存不足

    • 大量TNT爆炸,画面卡顿,是显卡吃紧

    • 而游戏闪退是因为内存不足

效率最高

以时间换空间

  • 空间换时间:用更多的空间去存储一些可以重复利用或快速获取的数据,从而节省时间;
  • 时间换空间:是用更多的时间去计算或获取一些不需要存储或可以压缩的数据,从而节省空间。
  • 为什么占用更多的存储空间可以提高运行速度
    • 是因为占用更多的存储空间可以减少读写数据的次数和时间,从而提高运行速度。
    • 比如,如果使用缓存技术,可以把经常访问的数据存储在内存中,这样就不用每次都从硬盘中读取,因为内存的读写速度比硬盘快得多

GC

  • GC是垃圾收集的意思,是一种自动内存管理的机制。
    • 当程序向操作系统申请的内存不再需要时,GC会主动将其回收并供其他代码进行内存申请时候复用,或者将其归还给操作系统,
    • 这样可以避免内存泄露和内存不足的问题GC的实现方式有多种
      • 比如引用计数法、
      • 标记清除法、分代收集法等
    • Java、Go、Python等语言都提供了GC功能,而C、C++等语言则需要程序员手动管理内存。

讲法分析

  • 做了很多却讲不出来
  • 内容要分栏,不然会误导读者

例会3

分享host

引入

  • 根服务器,热门电影流浪地球2的情节(dns解析服务器)
  • 2002年,美国与伊拉克交恶,伊拉克的顶级域名“.iq”被封杀,让伊拉克一时间从虚拟世界中蒸发(域名与ip)

什么是host

  • host是一个没有扩展名的系统文件
  • host文件是一个纯文本文件,可以用记事本打开和修改。它的内容是每行一个IP地址和域名的对应关系,中间用空格隔开
host没有拓展名
什么文件需要拓展名
  • 一般来说,文件都会有拓展名。文件扩展名是文件名中的一部分,通常用一个点号和几个字母来表示,比如.txt, .docx, .jpg等。
  • 文件扩展名的作用是告诉系统和用户这个文件是什么类型的,以及用什么程序或软件来打开它。
什么文件不需要拓展名
  • 一般来说,大多数文件都会有扩展名,但也有一些特殊的文件没有扩展名,比如:一些系统文件,比如host文件
  • host文件,它们是由系统自动生成和管理的,不需要用户修改或打开。

host的作用

  • 将IP地址和域名的映射关系存储在本地
  • 当用户在浏览器中输入一个网址时,系统会首先从host文件中寻找对应的IP地址
    • 如果找到,就直接访问该IP地址
    • 如果没有,就向DNS服务器发送请求,获取IP地址
与dns缓存的关系
  • DNS缓存和hosts文件都是用于存储域名和IP地址之间的对应关系,以便用户访问网站
  • DNS缓存是由操作系统或浏览器自动管理的,而hosts文件是由用户手动编辑的。
  • DNS缓存可以自动更新,而hosts文件需要用户定期维护。
  • hosts文件的优先级高于DNS缓存,也就是说如果hosts文件中有某个域名的记录,那么系统会直接使用它,而不会去查询DNS缓存或DNS服务器。
修改host的底层原理
  • 修改host文件的底层原理是利用host文件中的域名和IP地址的映射关系,来绕过DNS服务器的解析过程,直接访问目标网站的IP地址。
  • 当你访问一个域名时,系统会先检查host文件是否有这个域名的映射关系,如果有,就先调用这个IP地址。如果host文件中同一个域名有多个IP地址,那么系统会按照从上到下的顺序解析,但是不会覆盖之前的解析结果。
    • 也就是说,如果第一个IP地址可以访问成功,那么系统就不会再去尝试后面的IP地址。
    • 如果第一个IP地址访问失败,那么系统可能会尝试后面的IP地址,但是这取决于系统的配置和网络环境

实践修改github的host

  • 通过 DNS 查询工具,获取 github.com 的 IP 地址,选择 TTL 最小的 IP 地址。
    • TTL——Time To Live
      • 表示一个数据包在网络中可以经过的最多路由器数量。
  • 找到系统的 host 文件,把获取的 IP 地址和对应的域名添加到文件中,保存文件。
  • 刷新 DNS 缓存,或者断网再开网,或者重启机器,让 host 文件生效。

修改风险

  • 如果目标网站的IP地址发生变化,而本地的hosts文件没有及时更新,可能会导致无法访问或者访问错误的网站。
  • 如果修改了很多条目,可能会影响系统性能和网络速度
    • 修改hosts文件会绕过DNS缓存,导致每次访问网站都需要查询hosts文件,而不是直接从缓存中取出结果,这样可能会增加网络延迟
  • 如果修改的IP地址是恶意的,可能会导致访问到钓鱼网站或者中毒等安全问题。

例会3

短分享UGC

  • UGC:user generate content

    • 即用户将自己原创的内容通过互联网平台进行展示或者提供给其他用户。
  • UGC 和PGC,OGC的区别

    • PGC是Professional Generated Content,专业生产内容的缩写。

    • OGC是Occupationally-generated Content,职业生产内容的缩写。

      • UGC和PGC之间的区别在于内容创作者有无专业的知识和相关背景。UGC中可以转变成PGC,UGC可以激励PGC。

      • PGC和OGC之间的区别在于内容创作是否收取相应报酬,PGC内容生产者往往是出于“爱好”,义务贡献自己的知识;而OGC内容生产是基于报酬收取,其创作属于职务行为。

长分享 遗传算法

  • 基因:可行解编码的分量
  • 染色体:可行解的编码
  • 个体:可行解
  • 种群:取值对
  • 编码格式:二进制编码和浮点编码
    • 什么是编码:如十进制转换成二进制
  • NP问题
    • NP问题是指能在多项式时间内验证答案正确性的问题,但是不能在多项式时间内求解的问题。
    • 举个例子,旅行商问题就是一个NP问题。 旅行商问题是指一个旅行商要拜访n个城市,他必须恰好拜访每个城市一次且只能拜访一次,然后回到起点城市。这个问题的解法是枚举所有可能的路径,然后找到最短的路径。但是,当城市数量增加时,这个问题的解法将变得非常困难,因为它需要枚举所有可能的路径。

讲法反思

  • 对于一个基本概念,如果口述很难解释清楚,可以借助白板,画图来解释

    例会3.1

  • 建议:

    • 对于一个长分享,需要分享者对于分享内容要吃透,这样可以更好的讲述(可以突出演讲重点)
    • 对于ppt中的代码的部分,要提取出重点的部分来展示
      • 而所放代码在ppt上的格式是有讲究的。
    • 讲算法的目的:是带着做项目的目的还是实践?
    • 深入学习算法,自己发现了这个算法缺陷,然后找相关的资料如论文,看看是否有相关的解决方案。
    • 讲算法的流程:要体现思考,查阅,实践的过程。
    • 标注清楚易混淆的点

例会4

有趣的拷贝

堆和栈的关系

  • 堆和栈都是指内存空间,
  • 不同的是堆为按需申请、动态分配,例如 C 中的 malloc 函数和 C++ 中的 new 操作。
  • 栈由操作系统自动分配释放,无需我们手动控制。
  • 堆和栈实际上是操作系统对进程占用的内存空间的两种管理方式,主要有如下几种区别:
    • (1)管理方式不同。 栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;
    • (2)空间大小不同。 每个进程拥有的栈大小要远远小于堆大小。 理论上,进程可申请的堆大小为虚拟内存大小,进程栈的大小 64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;
    • (3)生长方向不同。 堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低;
    • (4)分配方式不同。 堆都是动态分配的,没有静态分配的堆。 栈有 2 种分配方式:静态分配和动态分配。 静态分配是由操作系统完成的,比如局部变量的分配。

js浅拷贝/深拷贝

  • 拷贝解决问题即克隆一个对象

    • 即创建一个新的对象,来接受你要重新复制或引用的对象值。
  • 二者区别

    • 浅拷贝的优点是效率高,因为只是复制了引用,而不是真正意义上的拷贝,所以速度很快。

      • 浅拷贝的缺点是如果一旦改变内容,所有引用该对象的变量都会受到影响。

        例会4.1

    • 深拷贝相当于把内存上的数据拷贝了一份,此时修改该变量不会影响原来的变量,同理修改原来的变量也不会影响现在的变量。

      • 深拷贝相对于浅拷贝来说,虽然效率较低,但是更加安全可靠。

有限状态机 (FSM)

作用

  • 使用有限状态机(FSM)是一种有效的方法来描述对象的行为和状态转换,从而实现对角色或游戏对象的控制。

四大概念

  • 状态
  • 事件
  • 动作
  • 变换

优缺点

优点
  • 1.易于理解和实现:FSM的理论和应用非常成熟,易于理解和实现。

    2.易于调试:FSM可以将问题分解为一系列状态和转换,从而更容易地找到错误和问题。

    3.可扩展性:FSM的状态和状态转换可以相对容易地进行扩展和修改,从而实现更多的功能和行为。

缺点
  • 1.不适合复杂的系统:对于非常复杂的系统,FSM可能会变得非常庞大和难以维护。

    2.无法处理一些问题:FSM是一种有限状态的模型,不能处理一些动态或非确定性的问题。

对于复杂的系统

  • 可以使用行为树

    • 行为树提供了一种以复杂性降序组织行为的分层方法一个复杂行为可以表示为行为树中的一个子树,而构成该复杂行为的多个简单行为则表示为该子树下更小的子树。
  • 行为树和FSM的区别

    • 1.结构不同:状态机是一种有限状态自动机,而行为树则是一种有向无环图,由一组节点和连接这些节点的行为组成。

      2.表现能力不同:状态机适用于描述一些简单的 AI 行为,如巡逻、追击、逃避等;而行为树适用于描述更复杂的 AI 行为,如战斗、任务、交互等。

      3.扩展性不同:行为树比状态机更具有扩展性,行为树可以通过添加、删除、修改节点和行为来快速适应不同的 AI 行为。

  • Title: Geek例会23年春
  • Author: Jexi Jiang
  • Created at : 2023-08-14 19:27:21
  • Updated at : 2024-01-15 13:20:57
  • Link: https://milefer7.github.io/Jaxi-Jiang-Blog/2023/08/14/Geek例会23年春/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments