上周在公众号做了一个送书活动,鼓励大家在文末分享自己的故事,其中有很多朋友的分享很有故事,看了大家的留言真心感觉每个程序员一路走来都不容易,也许他的故事会对你我有所启发,今天将这些故事整理分享给大家。...作为一个有时间啃书的学生党,深知一本好书的力量,醍醐灌顶之感,更让你惊叹知识,艺术之奇妙!...上官振宏 大学的时候无意中关注了一个微博,叫做程序员那点事,发现程序员群体真是幽默又有智慧,神秘又高冷。 作为一个医学生看的不亦乐乎,当时在校区间喜欢帮别人修电脑,配电脑。...但是一路走来,自己无论是从心态上还是技术上都有了踏踏实实的提升。 回想自己的大学四年,虽说是本专业(计算机科学与技术),但是自己确实那时候把青春都荒废了很多,和那些大佬相比自己确实还是差的很远。...当然,我不想灌鸡汤,因为每个人都不一样,不要让任何人干扰到自己的轨迹,我们所需要的就是坚持自己认为对的事情,一路走下去。 到最后,时间会证明一切。一杯敬朝阳,一杯敬过往
我们在写C程序的时候会发现每一个程序都有一个main函数,这是为什么呢?每一个C程序都必须有吗? 答案是:是的!!!...有主有次,执行起来条清缕析,既可将程序模块化又实现了一个闭合的整体。...在任何一个C程序中,main函数都是必不可少的,main函数是程序唯一的入口,也就是说,程序运行时,首先从main函数开始执行。...同时我们要注意一个C程序必须有且仅能有一个main函数,如果一个程序中出现了多个main函数,那么必定会出错。...因此,每个C程序都需要一个main函数作为程序的入口点,它负责接收控制权并开始执行程序的逻辑。没有main函数,程序将无法正常运行。
在过去的几年里,我使用着各式各样的HTTP API。这些API通常不是公开的,只是提供给合作伙伴公司。此外,我也看了很多开发者提供的API,自己也参与了几个API的开发。...让我们以Paypal的Create Payment API为例: 当我们创建一个新的付款资源。(我们向/v1/payments/payment发出POST请求),Paypal则立即向用户收费。...更糟糕的,如果我们有一个发现网络错误的自动重试机制,这会向用户发生二次收费。 当然,这是API的一个已存在的问题,Paypal提供了一个解决方案。...这两种方式都不是用户友好的:消费者需要有一个可靠的机制来生成相同的请求Id,在第二种情况下,如果你有多张发票的付款,该怎么办?可能还是需要一个更优雅的解决方案。...作者:Alex Rudenko 编译:21CTO社区 地址:https://dev.to/orkon/making-better-http-apis-72l
2021-11-29:给定一个单链表的头节点head,每个节点都有value(>0),给定一个正数m, value%m的值一样的节点算一类, 请把所有的类根据单链表的方式重新连接好,返回每一类的头节点。
2022-10-07:给定员工的 schedule 列表,表示每个员工的工作时间。 每个员工都有一个非重叠的时间段 Intervals 列表,这些时间段已经排好序。
一个长时间的http api 的 nginx 超时错误 直接访问IP是OK的。...用浏览器方式http api , 等待之后可以正确返回response。 但是,用下面的Kotlin代码的这个get方法调用: fun get(url: String): String?.../1.1} at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:203) at okhttp3.../1.1} at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:203) at okhttp3....Http1Codec.readResponseHeaders(Http1Codec.java:187) ... 19 more
2021-10-08:填充每个节点的下一个右侧节点指针。给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。...如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。...queue.isEmpty() { // 第一个弹出的节点 var pre = &Node{} size := queue.size for
EasyGBS中流媒体服务mideaserver端口配置中http端口并不是对外开放的,导致不能监测EasyGBS的mideaserver是否正常运行,为保证流媒体接口的安全调用,只能本地访问该流媒体接口...,相当于从外部访问需要做一个反向代理。...因此我们决定使用开放外部端口新增一个对外的http接口api,供外部调用,该接口以localhost访问本地的mideaserver的http接口,成功请求则返回状态码200,外部根据返回状态码是否200...接口路由:/api/v1/allgroup 初始化本地访问mideaserver的地址: 接口回调方法如图: API接口的公开是进行调用的基础,为了便于这部分用户的使用,不仅是EasyGBS,TSINGSEE...青犀视频平台都提供了API接口文档,调用自由方便。
2022-10-07:给定员工的 schedule 列表,表示每个员工的工作时间。每个员工都有一个非重叠的时间段 Intervals 列表,这些时间段已经排好序。
2023-01-04:有三个题库A、B、C,每个题库均有n道题目,且题目都是从1到n进行编号 每个题目都有一个难度值 题库A中第i个题目的难度为ai 题库B中第i个题目的难度为bi 题库C中第i个题目的难度为...但不能大于第一题难度的两倍 第三题的难度必须大于第二题的难度,但不能大于第二题难度的两倍 小美想知道在满足上述要求下,有多少种不同的题目组合 (三道题目中只要存在一道题目不同,则两个题目组合就视为不同 输入描述 第一行一个正整数...n, 表示每个题库的题目数量 第二行为n个正整数a1, a2,...... an,其中ai表示题库A中第i个题目的难度值 第三行为n个正整数b1, b2,...... bn,其中bi表示题库B中第i个题目的难度值
2022-05-17:在一个地图上有若干个炸弹,每个炸弹会呈现十字型引爆。 每个炸弹都有其当量值,这个值决定了这个炸弹的爆炸半径。...如果一个炸弹被引爆时,有其它炸弹在其爆炸半径内,那么其它炸弹也会爆炸。 请问使地图上所有炸弹爆炸所需的最少人为引爆次数。...例如: 0,0,0,0,0 0,0,0,1,0 0,0,0,0,0 上图中val为1的单元是一个炸弹,人为引爆后地图变成下面的样子: 0, 0, 0,-1, 0 0, 0,-1,-1,-1 0, 0,
304优化原因 app每次冷启初始化时都会请求重量级的HTTP主页list api,其会拉取全量1000个item(游戏关卡)组成的list数据一次性返回,返回的响应数据经gzip压缩之后依然有将近300KB...大小(解压后近3MB),单api如此大的数据传输对于网络带宽和传输速度都有明显的影响。...所以去年和客户端一起对该api进行了HTTP 304优化。...本地cache的引入 对于该api返回的1000个item,每个item都需要单独调用normalize函数进行一系列的处理--如配置资源地址到完整资源包格式转换、动态文案组装等,即便单个item normalize...调用只需要0.1ms,*1000之后也会变成100ms,所以服务端对于每个item的normalize结果都做了一个短期的本地cache,命中缓存的情况下1000个normalize所花费的时间由100ms
本文将从 设计模式、核心机制和整体优势 等角度,带你深入剖析 OKHttp 的内部实现原理。 二、OkHttp 的整体架构与核心组件 OKHttp 采用分层设计,主要分为客户层、执行层和连接层。...请求依次经过每个拦截器处理。...每个拦截器可选择: 修改请求/响应 截断流程并返回结果 调用 chain.proceed() 将请求传递给下一个拦截器 核心类:RealInterceptorChain public Response...内置核心拦截器及其作用 拦截器 作用 RetryAndFollowUpInterceptor 处理失败重试与重定向(301/302) BridgeInterceptor 补全 HTTP 头(如 Content-Type...HTTP/2 支持:支持多路复用(Multiplexing),同一主机多个请求共享一个 TCP 连接。 连接保活:空闲连接默认保持 5 分钟,可配置。 2.
(2) 同一个请求路径可以进行多个操作 (3) 请求方式会用到GET/POST/PUT/DELETE 非REST API: restless (1) 请求方式不决定请求的CRUD 操作 (2) 一个请求路径只对应一个操作...://localhost:3000/posts') // 返回一个数组,数组里有两个对象 // axios.get('http://localhost:3000/posts/1') // 返回一个对象...3.4 难点语法的理解和使用 3.4.1 axios.create(config) 根据指定配置创建一个新的 axios, 也就是每个新 axios 都有自己的配置 新 axios 只是没有取消请求和批量发请求的方法...(1) 需求: 项目中有部分接口需要的配置与另一部分接口需要的配置不太一样, 如何处理(比如有多个baseURL需要指定) (2) 解决: 创建2 个新axios, 每个都有自己特有的配置, 分别应用到不同要求的接口请求中...调用axios()并不是立即发送ajax 请求, 而是需要经历一个较长的流程 流程: 请求拦截器2 => 请求拦截器1 => 发ajax 请求 => 响应拦截器1 => 响应拦截器2 => 请求的回调
2022-09-27:给定一个棵树, 树上每个节点都有自己的值,记录在数组nums里, 比如nums[4] = 10,表示4号点的值是10, 给定树上的每一条边,记录在二维数组edges里, 比如edges
promise 并应用一个有效的响应 (查阅 [response docs](#response-api))....根据指定配置创建一个新的 axios, 也就就每个新 axios 都有自己的配置 2. 新 axios 只是没有取消请求和批量发请求的方法, 其它所有语法都是一致的 3. 为什么要设计这个语法?...(1) 需求: 项目中有部分接口需要的配置与另一部分接口需要的配置不太一 样, 如何处理 (2) 解决: 创建 2 个新 axios, 每个都有自己特有的配置, 分别应用到不同要 求的接口请求中 axios.create...根据指定配置创建一个新的 axios, 也就就每个新 axios 都有自己的配置 2. 新 axios 只是没有取消请求和批量发请求的方法, 其它所有语法都是一致的 3. 为什么要设计这个语法?...(1) 需求: 项目中有部分接口需要的配置与另一部分接口需要的配置不太一 样, 如何处理 (2) 解决: 创建 2 个新 axios, 每个都有自己特有的配置, 分别应用到不同要 求的接口请求中 拦截器函数
现在就尝试用标准的姿态,更加前端的角度去回答这几个问题。 写了好多天原理,现在就来实战一下吧。...,api) 我们要封装一个请求方法,实现以下目的: 把token带到header里去!...简单说就是一个具有路由拦截器功能的请求库。...挂载到vm api.js主要是前端管理接口的文件。结构示例如下: ? 在main.js下,引入http.js和api.js,然后挂在到 Vue的原型链上,就可以很方便地使用了。...$api; const http=this.
本文将从综合性能、优缺点、最佳使用场景以及使用方式的角度对这些数据请求方式进行分析。 介绍 XMLHttpRequest(XHR) XMLHttpRequest 是前端最早使用的数据请求方式。...拦截器支持:Axios 允许你添加请求和响应拦截器,这些拦截器可以在请求发送之前或响应到达之前进行自定义处理。...,基于回调 简洁的 API,基于 Promise 简洁的 API,基于 Promise,提供拦截器 简单的 API,但需要处理连接管理和消息格式 功能特性 事件驱动,支持同步请求 基于 Promise,...不支持同步请求 丰富的配置,拦截器,自动转换 JSON 实时双向通信,不支持 HTTP 请求方法 跨域请求 需要服务器支持 CORS 默认支持 CORS 默认支持 CORS 需要服务器支持 CORS 取消请求...每种方法都有其优点和局限性,理解它们的特点,可以帮助开发者更好地构建高效、稳定的前端应用。
对于每个服务,都提供了一个baseMap对象来描述不同环境下的base URLs。 baseServer有一个default属性设置为true,表示它可能是默认选择的服务器。...定义apiMap: apiMap对象定义了两个API:getBaseInfo和getBaseRestInfo。 每个API都有一个HTTP方法(method)和一个URL路径(url)。...,该函数的返回值将替换掉第一个参数匹配到的结果。...* 匹配模式是这样的\:[^/]* 为一个整体 全局g下多次匹配 也就是多次调用fn * [^/]匹配得到的是一个字符 只要匹配的url出现的一个字符在 [^/]中出现就匹配成功 但是是单个的...* 因为new完一个实例过后,拦截器信息可以作废 * 所以要确保你实例化之前先注册拦截器 */ Apis.reqMiddleware = [] Apis.resMiddleware