技术并不是唯一
技术就是王道?很多人,特别是还在学校的同学们总有一种错觉,感觉技术就是王道,只要我技术学得好,以后步入社会开始工作肯定能混的不差。在以前笔者也是其中的一员,但随着慢慢开始接触一些业务,在各大平台上看一些职场的新闻和心得,慢慢发现这句话并不完全正确。
技术重要吗?那肯定是重要的。无论以后是做管理还是做产品经理等等互联网相关的岗位,懂技术都能让你具有更大的优势。试想一下,你作为团队leader或者产品经理,接到了一个客户需求,你要把这个需求发给团队里的开发人员。如果你不懂技术,开发们跟你说这个做不了,或者给你一个离谱的工时评估,你怎么去反驳他们。要是你懂相关的技术,那你就可以直接说,用XXX方法,大约多少人/天的工作量,还有什么困难再告诉我我给你们解决。或者客户提出了什么离谱需求,你也不需要先去答应下来,而是直接跟客户说这个无法实现,然后继续讨论代替方案,这也会大大节约整体的项目完成时间。
个人发展但是,只一味地钻研技术,对个人发展也是不利的。越难越高深的技术,意味着需求就越少。工作职级和人数永远是一个金字塔形,越高级的技术工程师需求数量越少,需求最多的永远是底层的初级开发。当然,不是说让 ...
现代软件开发中的模式
前言在软件变得越来越大,越来越复杂的今天,像学生时代那样不使用任何设计模式、设计架构和设计工具来开发一款大型软件绝对是不可接受的。代码量一旦上来了,会出现很多代码量小的时候难以察觉到的设计思路缺陷和问题。这就要求我们一定要有工程化的思维。如果前期设计不好,代码量增加后后期修改和维护的成本将指数级上升。你会发现改任何一个点都会牵一发而动全身。
非常幸运的是,计算机与软件行业的前辈们已经将遇到的诸多问题一一克服,并迭代改进出了许多优秀的设计模式和设计方法。本文将简单介绍这些模式和方法当时所面临的问题以及它们克服问题所使用的方法蕴含的思想。一是理顺自己的思路,提醒笔者自己不断学习、不断进步;二是为了能给后来的学弟学妹门一些引导和启发,希望能对大家有所帮助。
设计模式首先是最基础的OOP(Object Oriented Programming,面向对象编程)及其四大特性:封装、抽象、继承、多态。它能够将复杂事物建模为可重现的简单结构,实现良好的可重用。内容比较基础,笔者在这里不过多赘述。
其次就是大名鼎鼎的设计模式。这些设计模式的目的其实都是一样的,就是让代码保持高内聚、低耦合,使得程序更加灵 ...
ChatGPT的流式输出
应用场景在使用ChatGPT时,模型的回复内容是一个字一个字蹦出来的,而不是整段话直接出现,整体呈现出一种类似于打字机的效果。但实际上,这个打字机效果是为了美化模型预测时间过长的一个副产品,类似于苹果的灵动岛。因为模型需要不断预测接下来要回复什么内容,整个预测完成的时间会比较长。
如果等整段回复生成之后再输出到网页,用户体验就会很差。所以最好是模型预测出几个词以后实时地输出到网页上,减轻用户的等待焦虑心理。
实现要实现这种效果,需要使用http协议的Server-Sent Events (SSE)技术。SSE是一种基于 HTTP 协议的服务器推送技术,它允许服务器向客户端发送数据和信息。与 WebSocket 不同,SSE 是一种单向通信方式,只有服务器可以向客户端推送消息。SSE 是 HTML5 规范的一部分,使用非常简单,主要由服务端与浏览器端的通讯协议(HTTP协议)和 EventSource 接口来处理 Server-sent events 组成,服务器端的响应的内容类型是“text/event-stream”。
Python Flask实现在Flask中没有专门的流式输出的 ...
Python编写规范PEP8
Python是一门很自由的语言。很多场景下都没有很严格的限制,只有一些推荐的规范。但也正因为如此,我们更应该遵循标准规范,这样才能写出良好的代码。其中,在编码风格方面,有一个专门的PEP(Python Enhancement Proposal,Python增强提案)是针对代码风格的指南。我们在编写代码的时候要尽量遵循这个规范。
PEP8 规范空格与缩进的使用
用空格来表示缩进,而不要用制表符(Tab)。最好是4个空格。注意:空格和Tab不能混用,否则会报错。当然你可能会说,我就是混用的,为什么没出过错。这是因为IDE会自动帮你把Tab转成4个空格。
和语法相关的缩进都用四个空格表示。(下文将四个空格写为一级缩进)
每行的字符数不超过120个字符。太长的行需要进行换行,换行后的新代码在原缩进的基础上再增加一级缩进。
函数和类的定义之间,代码前后用两行空行分隔。
同一个类中,各个方法之间用一行空行分隔。
二元运算符(如+、-、*、/、=)左右两边各保留一个空格。
文件的结尾留一行空行。
注释中#的后面应该空一格。如果注释前有代码,#前应至少空两个空格。
标识符命名
变量、函数和属性使用小 ...
知识与推理
智能代理 Agent定义For each possible percept sequence, a rational agent should select an action that is expected to maximise the performance measure, given the evidence provided by the percept sequence and whatever built-in knowledge the agent has.
一个代理应该拥有:
用来感知来自环境中的信息的Sensors 传感器
与环境进行交互的Actuators 执行器
指出应该怎么做的Agent function 代理函数
一个代理怎样才能变得智能?
我们需要告诉代理什么是合理的,也就是说,它需要一个performance measure 性能度量
这个代理存储一个percept sequence 感知序列(有关环境状态的信息)
代理可能有一些prior knowledge of the environment 关于环境的先验知识
具有代理可以执行的well ...
人机交互设计
引言如何进行设计我们需要考虑以下几点:
用户们都是哪些人?
哪些活动将要被执行?
交互发生的地方在哪?
所以,我们需要匹配用户的活动,需求和诉求
理解用户的需求:
需要考虑到人们擅长什么和不擅长什么
考虑一下什么东西可能在人们现在的做事方式上有帮助
思考一下什么可以提供高质量的用户体验
倾听人们想要什么,并让他们参与进来
使用经过尝试和测试的以用户为中心的方法
可用性与用户体验可用性目标:
有效
高效
安全
具有良好的实用价值
易于学习
很容易记住如何使用
用户体验目标:
satisfying
enjoyable
engaging
exciting
entertaining
rewarding
fulfilling
memorable
challenging
relaxing
comforting
fun
Donald Norman的设计原则可发现性 Visibility可以确定哪些操作是可行的以及设备的当前状态。明确的关键要素(行为召唤按钮、图片和标题),清晰的视觉层次结构(按优先级排列的内容), 显而易见的导航系统在设计中都具有良好的可发现性和理 ...
计算机安全概述
对称加密也被称为常规加密或单密钥加密。其安全使用的两个要求:1. 需要一个强加密算法,2. 发送者和接收方必须以一种安全的方式获得了密钥的副本,并且必须保持密钥的安全。
对应的攻击方式:
密码分析攻击:
依赖:算法的性质,一些了解明文的一般特征,一些样本明文密文对。利用算法的特征试图推断特定的明文或正在使用的密钥。如果成功,所有用该密钥加密的消息都会被破坏。
暴力攻击:
在密文上尝试所有可能的密钥,直到得到一个有意义的明文。
常见加密算法:
Data Encryption Standard (DES)
Triple DES (3DES)
Advanced Encryption Standard (AES)
常见对称加密模式:
ECB
全称:Electronic codebook,即电子密码本。需要将待加密消息按照对应算法分组的要求分成若干块,并对每个块进行独立加密
优点:ECB模块可以并行处理数据。
缺点:同样原文生成同样的密文,并不能很好地保护数据。
同时加密,如果原文一样,加密出来的密文也是一样的,因为它们的加密密钥key都是一样的。
CBC
全称:Cipher B ...
Vue-router和vuex
路由的定义后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上的资源。
前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)实现不同页面之间的切换。hash的特点是HTTP请求中不会包含hash相关的内容,类似于超链接中的锚点。这种通过改变hash来切换页面的方式称为前端路由。
路由可以让应用程序根据用户输入的不同地址动态挂载不同的组件。
Vue Router是Vue.js的官方路由管理器。
安装:
1npm install vue-router@4
vue-router的基本使用router-link通过使用一个自定义组件router-link来创建链接,可以使得vue-router在不重新加载页面的情况下更改URL,并处理URL的生成及编码。<router-link>组件支持用户在具有路由功能的应用中单击导航。通过to属性指定目标地址,默认渲染成带有正确链接的<a>标签。
<router-link>比<a href=”…”>会更好一些,理由如下:
无论是HTML5 history模式 ...
振动信号处理
振动信号处理基础在设备运行时,我们如果想要监控它内部各个部件的运转情况,一种行而有效的方式就是在相应部件上加装传感器,测量它的振动数据,再进行进一步的分析。采集到的原始信号往往是不能直接拿来分析的,需要经过一定的处理以后才能更好地提取出振动信号内部蕴含的特征。
振动的描述常用的描述振动的物理量:
位移 $\Delta x=x_2-x_1$
速度 $\nu=\lim_{\Delta t \to 0} \frac{\Delta x}{\Delta t}=\frac{dx}{dt}$
加速度 $a=\lim_{\Delta x \to 0} \frac{\Delta \nu}{\Delta t}=\frac{d \nu}{dt}$
力 $F=ma$
应变 (线应变、角应变)
定义与分类
确定性信号:能用确定的时间函数表达
周期信号:瞬时幅值随时间重复变化
简谐信号
复杂周期信号:能由几个简谐振动信号合成
非周期信号
随机信号
平稳随机信号:统计特性不随时间变化
各态经历信号:任一次实现都经历了所有可能状态的振动信号
非各态经历信号
非平稳随机信号
一般方法预处理常用方法 ...
SQL中JOIN与聚合函数的冲突解决方案
问题描述最近,笔者遇到了这样一个问题,举例说明一下。由于某些原因,真实的数据表被替换为虚构的水果相关表,并且虚构数据之间的对应关系与实际并不相符!
小A是个农场主,他遍布全国的果园里种植了大量不同的水果。对于每种水果,都有特定的适用的杀虫剂。对于如下三个表:
水果表(fruits)
id
name
type
color
area
pesticide_id
…
1
红富士
苹果
红色
烟台
3
…
2
华蕉
香蕉
黄色
海南
2
…
3
小香芒
芒果
黄色
海南
2
…
4
金枕榴莲
榴莲
黄色
海南
1
…
…
…
…
…
…
…
…
杀虫剂订购清单表(orders)
id
pesticide_id
order_num
order_time
…
1
2
26
2023-10-15 12:35:14
…
2
1
32
2023-10-15 18:12:47
…
3
2
17
2023-10-16 09:25:39
…
…
…
…
…
…
杀虫剂表(pesticides)
id
name
…
1
辛硫磷
…
2
灭 ...