nuxtjs请求其它页面闪首页的坑
考虑到seo,使用nuxtjs建立了自己的产品官网,但是在部署上线后出现了问题,用户说我收藏了某个网页,但是后面请求时都跑到首页去了,我仔细看了一下,刷新网页时确实会先闪现首页,后面再跑到指定的页面。
看了下nginx的请求,是请求的/about,但返回的是首页的页面。
再查了下站点的文件,也没有about文件呀,只有About。
想起来nginx的配置方式,请求不到对应的文件时,会跑到首页去,原因就明确了。
于是我改了文件夹的名字,把大写改为小写,再次请求验证ok。

那nuxtjs为什么会生成大写字母开头的文件夹?看了下源码,是因为vue文件命名成了大写,于是我重新把相关的文件名改为小写,再npm run generate生成静态部署文件就好了。
至于说是坑,可能是自己理解的问题,之前以为是不能使用static静态部署,要使用server模式才行,但是我这种小网站不想这么折腾,网上有人说用server模式加nginx反向代理就好了,其实不是这个问题,所以写篇文章记录一下。
贴一下相关的配置。
1 | // nuxt.config.js |
留言板小程序定制开发
定制小程序和星级用户有什么关系?
- 定制小程序和星级用户都拥有小程序的最高级别权限,都可以长期使用。
- 定制小程序的主体是你自己,因为这个小程序是你自己申请注册的,等于这个小程序就是属于你自己的了,所以小程序的名字可以自己命名。
- 定制小程序后,这个小程序就只有你自己一个人使用,留言内容可以由你自己把控,而星级用户使用的公共的小程序,有很多公众号使用,存在评论管理相关的风险。
定制开发流程
- 在微信公众平台注册一个小程序,激活后使用注册好的邮箱/密码登录进入小程序后台。

- 补充小程序的基本信息,如名称、图标、描述等。名称、图标、描述先和自己的公众号名字保持一致。

- 加客服进入后续的开发工作。

- 开发完成,提交微信审核。

- 审核通过,上线即可使用。

- 客服联系你,教你怎么使用留言板小程序。

定制开发价格
Linux守护进程(Daemon)介绍与C++实现
守护进程简介
守护进程(deamon)是生存期长的一种进程。它们常常在系统引导装入时启动(如果需要守护进程随系统自启动,需要在/etc/init.d目录下放置响应的启动脚本,或者利用systemctl来控制,还有一些其他方法如supervisor等,读者可自行网上搜索相关用法),仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。
从daemon的启动和管理方式区分,可以将daemon分为两大类:可独立启动的daemon(stand alone)和由一个超级daemon(super daemon)来统一管理的daemon。
- stand alone:可单独自行启动的daemon。这种daemon启动后会一直占用内存和系统资源,最大的优点是响应速度快,多用于能够随时接受远程请求的服务,如WWW的daemon(httpd)、FTP的daemon(vsftpd)等。
- super daemon:由一个特殊的daemon来统一管理。这种服务通过一个统一的daemon在需要时负责唤醒,当没有远程请求时,这些服务都是未启动的,等到有远程请求过来时,super daemon才唤醒相应的服务。当远程请求结束后,被唤醒的服务会关闭并释放系统资源。早期的super daemon是inetd,后来被xinetd替代了。super daemon本身是一个stand alone的服务,因为它需要管理后续的其他服务,所以它自己本身当然需要常驻内存中。
守护进程创建步骤
使用wsl搭建vscode调试环境
Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
使用了wsl可以丢弃VMware。
安装wsl
参考:https://docs.microsoft.com/en-us/windows/wsl/install-manual
PowerShell执行下面命令安装wsl:
协程解决了网络编程的哪些痛点
网络编程的痛点
reactor是基于异步事件的网络模型,但io操作都是同步的:非阻塞io,io多路复用,拷贝数据时还是需要等待。
同步和异步的区别是结果是否在发起调用处返回。阻塞与非阻塞的区别是io没有就绪的情况下是否立刻返回。
reactor的事件处理是异步的,回调太多会影响业务逻辑的编写,一个业务逻辑在不同的回调中完成,需要保存和传递上下文。需要通过协程捏合回调。
1 | void on_login(struct bufferevent *bev, struct Arg *args) { |
1 | function CMD.login(fd, name, password) |
协程
makefile、shell相关
leetcode-字节备考
无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
滑动窗口解法:
1 | class Solution { |
动态规划解法:
1 | class Solution { |
分布式锁和数据库锁
分布式锁
多个服务竞争稀缺资源,需要使用分布式锁。
- 锁是一种资源,需要存储,高可用性,避免锁全局失效。
- 隐含条件:加锁和释放锁必须是同一个对象,需要记录持有锁的对象。
- 另外需要实现互斥的语义,获取锁做个标记,释放锁时取消标记。
- 获取锁和释放锁都是网络通信实现的,需要考虑锁超时的问题。
- 锁释放通知问题:a.定时探寻。b. 被动通知(包括广播,和通知能够获取锁的特例)
- 是否允许同一个对象多次获取锁,可重入锁
特性:互斥性、可重入性、锁超时(取到锁的进程可能会宕机)、高可用性(redis集群实现,哨兵模式和cluster模式都是异步复制、最终一致性,可能会丢数据,cluster集群lua脚本可能失效)、分类(公平锁:根据队列顺序获取锁、非公平锁:随机派发锁)
其中高可用可分为计算型和存储型,计算型的是无状态的,存储型需要有一致性的协议,主要包括选举主节点、数据复制。
实现方式:redis/mysql、zookeeper/etcd
100行代码实现TCP/IP协议栈
使用约100行C语言代码,实现一个精简版的TCP/IP协议栈。通过手动解析以太网帧、IP包、UDP/TCP数据,深入理解协议栈工作原理。
2. 在 [Zeabur](https://zeabur.com) 部署你的仓库
3. 在 [Zeabur](https://zeabur.com) 控制台新增一个服务