技术分享
文章平均质量分 87
Yttsam
后端技能开发分享者。
展开
-
后台开发岗的精进基石——数据结构与算法,现在弥补还不算太晚!
数据结构与算法,重不重要?我觉得这是一个值得讨论的问题,大家有没有发现越大的公司,越爱在面试的时候考数据结构与算法的问题,几乎必问!(国内的有些公司可能除外)。为什么?原因很简单,算法题就是对面试的一个筛选,如果你是一个面试官,有两个人过来面试,一个算法很好但是对框架不是很熟悉,另一个反之。你会选谁?答案不言而喻。虽然第二个人并不熟悉某些特定的技术框架, 但我们也有理由相信, 他能迅速学习并胜任工作。况且现在技术更新迭代速度如此快, 只有学习能力强的程序员才能适应时代的发展, 而这样的人往往便是算法功原创 2021-01-05 21:19:17 · 404 阅读 · 1 评论 -
2021春招没有项目可写?6大企业级实战项目,让你拿下面试offer!
2020已经到了尾声,还有多少小伙伴还没有上岸呢?如果你也错过了秋招与提前批,那明年的春招就得好好准备一下了。对于校招的小伙伴来说,面试遇到最大的问题是什么?很多朋友和我说是缺乏实战的项目,基础技术在平时刷题已经OK了,可以在实际的运用却很匮乏。不要急,这里给大家推荐六大企业级练习项目,助力2021春招,让你拿下面试offer!一、大数据存储云盘系统(QT)项目技术内容:1.云盘架构设计与实现2. 网盘注册/登录模块3. 项目正则表达式应用4. 文件数据上传模块5. common文件设.原创 2020-11-06 16:08:25 · 2858 阅读 · 4 评论 -
自学软件编程,如何拿到京东秋招offer
大家好,今天给大家分享一下我的自学编程成长之路,给一些和我一样不是软件专业却想跨行到互联网的小伙伴一些参考和借鉴吧。我本科是学地质专业的,之后也保了研。但是在读研一的过程中,在一些学习过程中会用到软件开发的一些技术,所以就在平时会自己去稍微学习一下。至于到现在会为什么彻底的从土木转到软件开发行业呢?那是在我在读完研一的时候,和朋友一起在讨论对于人生职业的规划,觉得在工作的生涯中,个人的自我价值体现是很重要的,想到自己在这行业内以后的存在可替代,就不禁有了跨行到软件专业的念头,于是我便开始学习编程。可.原创 2020-10-29 16:27:29 · 412 阅读 · 1 评论 -
Linux学习环境搭建-VMWare安装Ubuntu16.04
常用的linux系统为ubuntu和centos。技术分享公众号【Linux开发架构之路】VMWare安装Ubuntu16.04一 概述• VMware Workstation 12的安装(略过,自行百度)• Ubuntu16.04的安装• 克隆出多个镜像二 Ubuntu16.04的安装1 准备• Window10 专业版(关闭Hyper-V)• Ubuntu16.04 下载2 安装• 点击新建虚拟机自定义并下一步选择自己Workstation版本并下一步选择下载好的u原创 2020-09-19 16:43:31 · 215 阅读 · 0 评论 -
协程性能测试
测试环境:4台VMWare 虚拟机1台服务器 6G内存,4核CPU3台客户端 2G内存,2核CPU操作系统:ubuntu 14.04服务器端测试代码:https://github.com/wangbojing/NtyCo客户端测试代码:https://github.com/wangbojing/c1000k_test/blob/master/client_mutlport_epoll.c按照每一个连接启动一个协程来测试。每一个协程栈空间 4096byte6G内存 –> 测试协程数量100原创 2020-07-21 20:38:53 · 297 阅读 · 0 评论 -
协程的实现之调度器
问题:协程如何被调度?调度器的实现,有两种方案,一种是生产者消费者模式,另一种多状态运行。7.1 生产者消费者模式逻辑代码如下:while (1) { //遍历睡眠集合,将满足条件的加入到ready nty_coroutine *expired = NULL; while ((expired = sleep_tree_expired(sched)) != ) { TAILQ_ADD(&sched->ready,原创 2020-07-16 17:47:19 · 425 阅读 · 0 评论 -
协程的实现之定义
协程的实现之定义问题:协程如何定义? 调度器如何定义?先来一道设计题:设计一个协程的运行体R与运行体调度器S的结构体运行体R:包含运行状态{就绪,睡眠,等待},运行体回调函数,回调参数,栈指针,栈大小,当前运行体调度器S:包含执行集合{就绪,睡眠,等待}这道设计题拆分两个个问题,一个运行体如何高效地在多种状态集合更换。调度器与运行体的功能界限。6.1 运行体如何高效地在多种状态集合更换新创建的协程,创建完成后,加入到就绪集合,等待调度器的调度;协程在运行完成后,进行IO操作,此时IO并原创 2020-07-15 16:59:47 · 276 阅读 · 1 评论 -
协程的实现之切换
协程的实现之切换问题:协程的上下文如何切换?切换代码如何实现?首先来回顾一下x86_64寄存器的相关知识。x86_64 的寄存器有16个64位寄存器,分别是:%rax, %rbx, %rcx, %esi, %edi, %rbp, %rsp, %r8, %r9, %r10, %r11, %r12,%r13, %r14, %r15。%rax 作为函数返回值使用的。%rsp 栈指针寄存器,指向栈顶%rdi, %rsi, %rdx, %rcx, %r8, %r9 用作函数参数,依次对应第1参数,第2参数原创 2020-07-10 19:35:28 · 1113 阅读 · 0 评论 -
协程的实现之原语操作
协程的实现之原语操作问题:协程的内部原语操作有哪些?分别如何实现的?协程的核心原语操作:create, resume, yield。协程的原语操作有create怎么没有exit?以NtyCo为例,协程一旦创建就不能有用户自己销毁,必须得以子过程执行结束,就会自动销毁协程的上下文数据。以_exec执行入口函数返回而销毁协程的上下文与相关信息。co->func(co->arg) 是子过程,若用户需要长久运行协程,就必须要在func函数里面写入循环等操作。所以NtyCo里面没有实现exit的原语操原创 2020-07-10 15:18:54 · 567 阅读 · 0 评论 -
协程工作流程的实现
协程的实现之工作流程问题:协程内部是如何工作呢?先来看一下协程服务器案例的代码, 代码参考:https://github.com/wangbojing/NtyCo/blob/master/nty_server_test.c分别讨论三个协程的比较晦涩的工作流程。第一个协程的创建;第二个IO异步操作;第三个协程子过程回调3.1 创建协程当我们需要异步调用的时候,我们会创建一个协程。比如accept返回一个新的sockfd,创建一个客户端处理的子过程。再比如需要监听多个端口的时候,创建一个server的原创 2020-07-10 15:03:49 · 276 阅读 · 0 评论 -
协程的实用案例—协程如何使用?与线程使用有何区别?
协程的案例问题:协程如何使用?与线程使用有何区别?在做网络IO编程的时候,有一个非常理想的情况,就是每次accept返回的时候,就为新来的客户端分配一个线程,这样一个客户端对应一个线程。就不会有多个线程共用一个sockfd。每请求每线程的方式,并且代码逻辑非常易读。但是这只是理想,线程创建代价,调度代价就呵呵了。先来看一下每请求每线程的代码如下:while(1) { socklen_t len = sizeof(struct sockaddr_in); int clientfd = acc原创 2020-07-10 14:54:52 · 216 阅读 · 0 评论 -
牛皮了,协程?你造吗?
协程的起源问题:协程存在的原因?协程能够解决哪些问题?在我们现在CS,BS开发模式下,服务器的吞吐量是一个很重要的参数。其实吞吐量是IO处理时间加上业务处理。为了简单起见,比如,客户端与服务器之间是长连接的,客户端定期给服务器发送心跳包数据。客户端发送一次心跳包到服务器,服务器更新该新客户端状态的。心跳包发送的过程,业务处理时长等于IO读取(RECV系统调用)加上业务处理(更新客户状态)。吞吐量等于1s业务处理次数。业务处理(更新客户端状态)时间,业务不一样的,处理时间不一样,我们就不做讨论。那如原创 2020-07-10 14:49:21 · 192 阅读 · 0 评论