程序员如何找到女朋友?

2023-11-13

文:  转载自公众号51CTO技术栈


生活中我们常常发现很多程序员拿着高薪,却常常沦为单身狗,每当情人节来临,却只能形单影只的一个人,过得十分凄惨。


自从程序员毕业出来工作进入 IT 行业之后,常常接触不到女性,一不小心就到了被催恋催婚的年纪。


前有阿里的高级工程师,穿着一双特步的运动鞋去相亲,结果被对方婉拒。后有某程序员自爆去相亲,却带着相亲对象吃 79 块的肯德基,结果回去后就被妹子拉黑了。

程序员们常常是大家调侃的对象,是因为他们每天与机器为伍,和电脑打交道,给人们留下的印象是宅,木讷,不善交流......

据说世界上有 2 种程序猿,一种是有女朋友的程序猿,另一种是不知道别的程序猿是怎么找到女朋友的程序猿。

那些有女朋友的程序员都是怎么找到女朋友的呢?让我们一起来看下网友们怎么说。

程序员如何在工作后找到女朋友?


@知乎 小酱油


程序猿女朋友内心 OS:你特么才是瞎呢!


@知乎 杨锘


这可以说很惨了


@知乎 程序员大叔


屏幕前面作为程序猿的你还喜欢女孩子吗?


@知乎 禹程


长得帅是不分国界边界业界的好吗?


@知乎 卡拉迦迪斯


说出了这么人神共愤的话

有很多妹子表示,都想找程序猿当男朋友,奈何...


其实,除了宅,近乎完美的高薪程序员为什么会至今单身呢?这个问题一直没找到一个合理的解释。那么,就先让我们一起来看下面这个故事!


程序员们为什么不追女生了?


程序员们为什么不追女生了?当然是因为,女朋友哪有代码好看,女朋友哪有基友懂我,女朋友老管我,为什么要有女朋友。


对不起我撒谎了,为什么撒谎,容我先讲个故事。


3 个月前,我发送了一个请求给一见钟情的姑娘,没想到她很快地响应了数据。


在交互了一个月,传递了一些参数后,最终我鼓起勇气,发送一个新请求。


没有响应,再次请求,再三请求,她还是响应了个 404,我觉得我的路径有问题。


能 ping 得通,就是访问不了,怪事!于是我决定使用闺蜜这个代理服务器,闺蜜建议我换参数,比如某款香水。


这次立即给我响应了,登上主页面提示我提交数据,她则返回了空结果作为响应,于是我传了更多的参数,并再一次发出了请求。


这次她显示权限不足,依然 404。我找了基友,帮忙一起找 Bug,但在找我的 Bug 过程中,发现有好几个人同时在给她发请求,但都得到响应了。


有的甚至已经开通白名单,原来 Server 端并不是不能处理并发,而是直接忽略了我的请求。


最后我恍然大悟,原来是 CPU、显卡性能不够,只能当备用,怪不得频频响应数据,接受参数,却一个功能都用不了。


最终我花了差不多 10K,但我意识到该及时止损了,最后当我狠心卸载的时候,她还百般挽留,让我对服务进行评价...


过几天,别人建议我试试访问闺蜜这个代理地址,传递同样的参数,说不定就通了,性能更优。但我没有这么做,因为即使在这炮火连天的社会,我也不想变成,女生口诛笔伐的渣男。


幸运的是,我没有等到“我一直把你当朋友啊”这个触发事件才终止请求,但最终因才疏学浅,无法处理这种高并发问题,更不能保证线程安全,在考虑到时间、空间,及个人精力问题后,只能选择放弃。


前几天,突然看到了一条朋友圈,一位拥有着萌萌头像的姑娘说:“为什么男生总是追到一半就不追了?”


What?一半?你特么给个进度条啊?怎么会有女生觉得自己就应该一直被追到底啊?!对不起,这种事情对被追求者来说是一半,对追求者来说是已经结束了。


你不喜欢我,我心里不承认,你嘴上不承认后来我想明白了,我并不欠你的。


我并不想因为挫折就学套路,因为很多事情告诉我,世界上最可爱最打动人心的都是那些傻逼,而不是那些牛逼(pi)。


身边的程序员,都是老实孩子,我们是有点积蓄,但不想当提款机,我付出了真心,也希望收获真心。


如果你不喜欢我,请直接告诉我,我没有比特币,更没有 208 万,和你来一次壮志凌云地告别,但我依然相信爱情,只希望,遇见你,就是你!


看完上述这个故事,你有何感想?程序员可能是这个世界上“直男癌” 患者最多的群体之一吧。


但是……你真当他们木讷、死板、死宅、不懂浪漫?开什么玩笑!在 520 之际,小编特地收集了这个程序员专属的告白方式与大家分享,一起看看程序员用代码敲出的浪漫吧~


程序员的小浪漫----烟火


完整项目预览地址:http://lingyouhuiquanla.com/lover/


属性设计


烟花应有的三个状态状态:

  • 升空

  • 等待炸裂

  • 炸裂后


花:发射点(x,y),爆炸点(xEnd,yEnd),升空后等待炸裂时间(wait),炸裂后微粒个数(count),烟花半径(radius)


烟花炸裂后微粒:自身位置(x,y),自身大小(size),自身速度(rate),最大烟花半径(radius)。


config:为全局变量,以及控制参数,包括画布宽高,设定烟花属性等。


设定全局变量


 
 
  1. const config = {

  2.    width: 360,

  3.    height: 600,

  4.    canvases: ['bg', 'firework'],

  5.    skyColor: '210, 60%, 5%, 0.2)',

  6.    fireworkTime:{min:30,max:60},

  7.    //烟花参数本身有默认值 传入undefined则使用默认参数

  8.    fireworkOpt:{

  9.        x: undefined,

  10.        y: undefined,

  11.        xEnd: undefined,

  12.        yEnd: undefined,

  13.        count: 300,   //炸裂后粒子数

  14.        wait: undefined,  //消失后 => 炸裂  等待时间

  15.    }

  16. }


构建微粒类


 
 
  1. class Particle{

  2.    //默认值写法

  3.    constructor({x, y, size = 1, radius = 1.2} = {}){

  4.        this.x = x;

  5.        this.y = y;

  6.        this.size = size;

  7.        this.rate = Math.random(); //每个微粒移动的速度都是随机不同的

  8.        this.angle = Math.PI * 2 * Math.random(); //每个微粒的偏移角度

  9.        //每次微粒移动速度分解为横纵坐标的移动。

  10.        this.vx = radius * Math.cos(this.angle) * this.rate;

  11.        this.vy = radius * Math.sin(this.angle) * this.rate;

  12.    }

  13.    go(){

  14.        this.x += this.vx;

  15.        this.y += this.vy;

  16.        this.vy += 0.02; //重力影响 y越大实际越偏下

  17.        //空气阻力

  18.        this.vx *= 0.98;

  19.        this.vy *= 0.98;

  20.    }

  21.    //画出微粒的位置

  22.    render(ctx){

  23.        this.go();

  24.        ctx.beginPath();

  25.        ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2, false);

  26.        ctx.fill();

  27.    }

  28. }


构建烟花类


 
 
  1. class Firework{

  2.    constructor({x, y = config.height, xEnd, yEnd, count = 300, wait} = {}){

  3.        //烟花自身属性

  4.        this.x = x || config.width / 8 + Math.random() * config.width * 3 / 4;

  5.        this.y = y;

  6.        this.xEnd = xEnd || this.x;

  7.        this.yEnd = yEnd || config.width / 8 + Math.random() * config.width * 3 / 8;

  8.        this.size = 2;

  9.        this.velocity = -3;

  10.        this.opacity = 0.8;

  11.        this.color = `hsla(${360 * Math.random() | 0},80%,60%,1)`;

  12.        this.wait = wait || 30 + Math.random() * 30;

  13.        //微粒个数等

  14.        this.count = count;

  15.        this.particles = [];

  16.        this.createParticles();

  17.        this.status = 1;

  18.    }

  19.    //创建微粒

  20.    createParticles(){

  21.        for(let i = 0;i < this.count; ++i){

  22.            this.particles.push(new Particle({x:this.xEnd, y:this.yEnd}));

  23.        }

  24.    }

  25.    //升空

  26.    rise(){

  27.        this.y += this.velocity * 1;

  28.        this.velocity += 0.005; //升空时产生的阻力

  29.        //烟花升空到目标位置开始渐隐

  30.        if(this.y - this.yEnd <= 50){

  31.            this.opacity = (this.y - this.yEnd) / 50;

  32.        }

  33.        //如果到了目标位置 就开始第二个状态

  34.        if(this.y <= this.yEnd){

  35.            this.status = 2;

  36.        }

  37.    }

  38.    //渲染烟花  烟花所有动作完成之后返回false

  39.    render(ctx){

  40.        switch(this.status){

  41.            case 1: //升空

  42.            ctx.save();

  43.            ctx.beginPath();

  44.            ctx.globalCompositeOperation = 'lighter';

  45.            ctx.globalAlpha = this.opacity;

  46.            ctx.translate(this.x, this.y);

  47.            ctx.scale(0.8, 2.3);

  48.            ctx.translate(-this.x, -this.y);

  49.            ctx.fillStyle = this.color;

  50.            ctx.arc(this.x + Math.sin(Math.PI * 2 * Math.random()) / 1.2, this.y, this.size, 0, Math.PI * 2, false);

  51.            ctx.fill();

  52.            ctx.restore();

  53.            this.rise();

  54.            return true;

  55.            break;

  56.            case 2: //烟花消失阶段,等待炸裂

  57.            if(--this.wait <= 0){

  58.                this.opacity = 1;

  59.                this.status = 3;

  60.            }

  61.            return true;

  62.            break;

  63.            case 3: //炸裂之后 渲染烟花微粒

  64.            ctx.save();

  65.            ctx.globalCompositeOperation = 'lighter';

  66.            ctx.globalAlpha = this.opacity;

  67.            ctx.fillStyle = this.color;

  68.            for(let i = 0;i < this.particles.length;++i){

  69.            this.particles[i].render(ctx);

  70.            }

  71.            ctx.restore();

  72.            this.opacity -= 0.01;

  73.            return this.opacity > 0;

  74.            break;

  75.            default:

  76.            return false;

  77.        }

  78.    }

  79. }


放烟花


 
 
  1. const canvas = {

  2.    init: function(){

  3.        //一些属性的设定 可以不用管

  4.        this.setProperty();

  5.        this.renderBg();

  6.        //循环体 **主要

  7.        this.loop();

  8.    },

  9.    setProperty: function(){

  10.        this.fireworks = [];

  11.        this.width = config.width;

  12.        this.height = config.height;

  13.        this.fireworkTime = (config.fireworkTime.min + (config.fireworkTime.max - config.fireworkTime.min) * Math.random()) | 0;

  14.        this.bgCtx = document.querySelector('#bg').getContext('2d');

  15.        this.fireworkCtx = document.querySelector('#firework').getContext('2d');

  16.    },

  17.    renderBg(){

  18.        this.bgCtx.fillStyle = 'hsla(210, 60%, 5%, 0.9)'

  19.        this.bgCtx.fillRect(0, 0, this.width, this.height);

  20.    },

  21.    loop(){

  22.        requestAnimationFrame(this.loop.bind(this));

  23.        this.fireworkCtx.clearRect(0, 0, this.width, this.height);

  24.        //随机创建烟花

  25.        if(--this.fireworkTime <= 0){

  26.            this.fireworks.push(new Firework(config.fireworkOpt));

  27.            //每次到点之后重新设置烟花产生时间 (|0转化为整数)

  28.            this.fireworkTime = (config.fireworkTime.min + (config.fireworkTime.max - config.fireworkTime.min) * Math.random()) | 0;

  29.        }

  30.        for(let i = this.fireworks.length - 1; i >= 0; --i){

  31.            //渲染烟花 (若返回值为false则移除烟花)

  32.            !this.fireworks[i].render(this.fireworkCtx) && this.fireworks.splice(i,1);    

  33.        }

  34.    }

  35. }

  36. canvas.init();


完善


此时烟花是这样的,感觉少了点小尾巴。


现在我们每一帧都是清除了画布,如果要加上小尾巴其实也很简单,每一帧都不要清除画布,而是覆盖一层新的有透明度的天空上去。


 
 
  1. //canvas.loop方法

  2. // this.fireworkCtx.clearRect(0, 0, this.width, this.height);

  3. this.fireworkCtx.fillStyle = config.skyColor;

  4. this.fireworkCtx.fillRect(0,0,this.width,this.height);    

这时就变成这样了。但是,还是缺少了在爆炸瞬间天空变亮的场景。那么在画烟花的时候,先会获取一下烟花的颜色以及透明度。


 
 
  1. // *****Firework constructor

  2. // this.color = `hsla(${360 * Math.random() | 0},80%,60%,1)`;

  3. this.hue = 360 * Math.random() | 0;

  4. this.color = `hsla(${this.hue},80%,60%,1)`;

 
 
  1. // *****Firework 新增实例方法

  2. getSkyColor(){

  3.    const skyColor = {

  4.        //只有炸裂阶段才返回亮度

  5.        lightness: this.status == 3 ? this.opacity : 0 ,

  6.        hue: this.hue

  7.    };

  8.    return skyColor;

  9. }

 
 
  1. // *****config 修改config的skyColor

  2. // skyColor: 'hsla(210, 60%, 5%, 0.2)',

  3. skyColor: 'hsla({hue}, 60%, {lightness}%, 0.2)',

 
 
  1. // canvas.loop方法

  2. //this.fireworkCtx.fillStyle = config.skyColor;

  3. //每次替换色调与亮度值。

  4. this.fireworkCtx.fillStyle = config.skyColor.replace('{lightness}', 5 + this.skyColor.lightness * 15).replace('{hue}' , this.skyColor.hue);

  5. this.skyColor = { //新增

  6.    lightness: 0,

  7.    hue: 210

  8. };

  9. for(let i = this.fireworks.length - 1; i >= 0; --i){

  10.    //新增 天空颜色为最亮的烟花的颜色

  11.    this.skyColor = this.skyColor.lightness >= this.fireworks[i].getSkyColor().lightness ? this.skyColor : this.fireworks[i].getSkyColor();

  12.    !this.fireworks[i].render(this.fireworkCtx) && this.fireworks.splice(i,1);    

  13. }

到现在就算是大功告成了。


完整项目


Github 项目地址:https://github.com/NewNewKing/SmallRomance


如有侵权,请及时联系


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序员如何找到女朋友? 的相关文章

  • 高云FPGA系列教程(基于GW1NSR-4C TangNano 4K开发板)

    文章目录 TOC 已完成 待完成 已完成 国产FPGA高云GW1NSR 4C 集成ARM Cortex M3硬核 高云FPGA系列教程 1 FPGA和ARM开发环境搭建 高云FPGA系列教程 2 FPGA点灯工程创建 程序下载和固化 高云F
  • React面试题汇总

    1 面试官 说说对 React 的理解 有哪些特性 React遵循组件设计模式 使用虚拟 DOM 来有效地操作 DOM 遵循从高阶组件到低阶组件的单向数据流 React 特性有很多 如 JSX 语法 单向数据绑定 虚拟 DOM 声明式编程
  • 【深度学习】 - 作业7: 图像超分辨率重建

    课程链接 清华大学驭风计划 代码仓库 Victor94 king MachineLearning MachineLearning basic introduction github com 驭风计划是由清华大学老师教授的 其分为四门课 包括
  • web端上传图片时 图片被旋转问题

    有些时候在web端上传图片会遇到这种情况 正向的图片 上传预览时就被旋转了 发生这种情况是因为 照片中包含很多属性来记录拍摄信息 想要读取这些属性 需要引入EXIF 可在npm上搜索exif js下载 EXIF中 包含一个Orientati
  • Qt内存管理及泄露后定位到内存泄漏位置的方法

    Qt内存管理机制 Qt使用对象父子关系进行内存管理 在创建类的对象时 为对象指定父对象指针 当父对象在某一时刻被销毁释放时 父对象会先遍历其所有的子对象 并逐个将子对象销毁释放 Qt内存管理代码示例 QLabel label new QLa
  • Linux 查找文件(find命令/locate命令)

    目录 一 find 我的东西在哪 二 更快速地定位文件 locate命令 一 find 我的东西在哪 随着文件增多 我们有时候记住某个文件放在哪个文件夹下了 此时搜索工具显得非常有用了 而find就是这样一个命令 可以帮助我们在指定范围内查
  • 多对一的4种查询方式

    多对一的概念在数据库中是十分常见的 下面将以多个学生对应一个老师的例子介绍4种多对一的查询方式 一 建立数据库 首先建立2种表 一种是teacher表 其中包含的字段有id 主键 name 一种是student表 其中包含的字段有id 主键
  • rsa加密

    public static class RSAHelper private static string privateKey private static string publicKey public static string GetP
  • LLMs的自动化工具系统(HuggingGPT、AutoGPT、WebGPT、WebCPM)

    在前面两篇博文中已经粗略介绍了增强语言模型和Tool Learning 本篇文章看四篇代表性的自动化框架 HuggingGPT AutoGPT WebGPT WebCPM Augmented Language Models 增强语言模型 T
  • log4j Layout简介说明

    转自 log4j Layout简介说明 下文笔者讲述log4j的简介说明 如下所示 log4j Layout的功能 log4j Layout主要用于日志数据格式化 它有以下三种形式 HTMLLayout 将日志格式化为HTML表格形式 ht
  • 记录uni-app开发原生android插件,调用不了,没有返回值的问题。返回值为{}的问题。返回值为空的问题

    1 引入了原生插件但是调用不了没有返回值 这种情况大多数是开发原生插件的时候引入了aar库 但是打包的时候没有引入 把需要引入的库放在生成的文件目录下就可以比如 开发了一个叫t1 module 的插件 引入了一个printer lib 3
  • vivado时序分析 实例

    vivado时序分析实例 建立余量 保持余量 实例分析 建立余量 保持余量 实例分析 环境 Vivado 2019 2 芯片型号 xc7z020clg484 2 举例子说明怎么使用Reporte Timing Summary 建立源工程 m
  • locust 性能测试工具(V2.8.6)

    locust 性能测试工具 特点 安装 验证 Demo 编写 locustfile 配置 分布式生成负载 在调试器中运行测试 在 Docker 中运行 使用 Terraform AWS 运行分布式负载测试 不使用 web UI 运行 自定义
  • c语言程序延时参数500,C语言精确延时设计

    我现在就用两种方法来实现 一种是while 语句 另一种是for 语句 这两种语句均可产生汇编语句中的DJNZ语句 以12MHZ晶振为例 说明 在编写C程序时 变量尽量使用unsigned char 如满足不了才使用unsigned int
  • Spark学习笔记:OutOfMemoryError-Direct buffer memory (OOM)

    之前也遇到过几次关于OOM 堆外内存溢出 的问题 但都只是大体上看了看 没有细致的总结 目前了解的还不是特别清楚 只好总结一下我觉得可行的处理方案 另外贴一些原理 首先是当时的一些处理方案 第一次OOM 第一次遇到这个问题时 上网查 发现很
  • 磁盘格式化了怎么恢复里面文件

    磁盘格式化了怎么恢复里面文件 磁盘格式化了数据能恢复吗 电脑磁盘是我们生活中经常打交道的一种存储介质 我们的电脑每天在工作和学习中都要读写大量的数据 因此我们经常要清理电脑磁盘保证电脑的运行速度和内存充足 那么如果电脑磁盘被格式化了该怎么恢
  • yocto编译linux社区5.10版本的坎坷

    作为菜鲲的我 基于meta intel的bsp进行修改 精简后的linux intel 5 10 bb内容如下 require recipes kernel linux linux yocto inc FILESEXTRAPATHS pre
  • add_subdirectory(子文件夹名)用法

    add subdirectory 子文件夹名 表示对子文件夹项目进行cmake编译
  • redis命令之哈希表类型hdel命令用法详情

    哈希表 HDEL命令 命令 hdel key field field field 同时删除N个field 对于不存在的field会被忽略 并返回被删除的field的个数 当在该key下的最后一个field也被删除掉的话 再通过hget ke
  • 设计模式(2)之单例模式

    外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img AHenjiIs 1610326440502 https img shields io badge link 996 icu red svg 单例模式 顾名思义就是

随机推荐

  • 数据库表结构设计

    数据库表结构设计 一 数据库 二 数据库类型 三 设计步骤 四 表设计 本来最近不想写东西的 奈何平台给推了个流量券 一 数据库 简而言之就是 存储数据的一个容器 常见的数据库软件有MySQL Oracle SQL Server Postg
  • python的下载和安装步骤,python下载安装教程3.10.0

    大家好 给大家分享一下python下载安装教程3 10 0 很多人还不知道这一点 下面详细解释一下 现在让我们来看看 第一步 下载Python安装包 在Python的官网 www python org 中找到最新版本的Python安装包 点
  • 企业级springboot项目架构模板V2.0,开箱即用

    此次 2 0 更新点 1 优化 Controller 接口入参 post 和 put 接口使用 json 格式入参 2 日志服务 quick log serve 增加查询操作日志列表接口 3 quick log serve 服务会记录需要鉴
  • Linux命令_lsof & 网络/文件监控

    官方描述 一个打开的文件可以是一个常规文件 一个目录 一个块特殊文件 一个字符特殊文件 一个执行文本引用 一个库 一个流或一个网络文件 Internet套接字 NFS文件或UNIX域套接字 可以通过路径选择文件系统中的某个文件 也可以选择文
  • Python数据可视化的例子——条形图(bar)

    1 matplotlib模块 应用matplotlib模块绘制条形图 需要调用bar函数 关于该函数的语法和参数含义如下 bar x height width 0 8 bottom None color None edgecolor Non
  • Axure RP 9软件安装步骤

    1 官网下载软件 第一步 点击安装文件 建议安装到D盘 请记住具体安装位置 后续汉化需要用到 本人实际位置 D Program Files x86 Axure Axure RP 9 第二步 激活 打开软件中的激活 第三步 汉化 复制汉化文件
  • discuz数据库密码修改

    在源码config目录下找到这两个文件 然后打开修改密码
  • [开发过程]<软件设计>UML建模初体验

    0 引言 前文提到UML的相关工具 前文链接如下 开发过程 软件设计 关于统一建模语言UML 崭蓝码农的博客 CSDN博客从某一个需求出发 开发中有4个重点问题 1 业务逻辑 2 程序逻辑 3 各进程之间的关系 4 物理实现 为了根据需求
  • 【AI工具】 一款多SOTA模型集成的高精度自动标注工具(直接安装使用,附源码)

    目录 高精度自动标注工具简介及其特性 标注工具的安装 开启自动标注 简介 X AnyLabeling 是一款全新的交互式自动标注工具 其基于AnyLabeling进行构建和二次开发 在此基础上扩展并支持了许多的模型和功能 并借助Segmen
  • java--基础--21.2--注解--案例

    java 基础 21 2 注解 案例 1 类注解 可以在运行时获取类 方法或字段的注解 下面是获取类注解的示例 Class aClass TheClass class Annotation annotations aClass getAnn
  • jar包快速启动和远程监听

    jar包快速启动 制作bat文件 设置窗口背景和字体颜色 设置窗口大小 设置启动内存大小 设置依赖lib文件路径 设置远程debug 制作bat文件 if root set root d root cd root jar bat color
  • STM32的12位ADC过采样实现16位分辨率

    1 什么是过采样 过采样技术是一种以牺牲采样速度来提高ADC分辨率的技术 部分STM32单片机是支持硬件过采样的 如STM32G0系列 通过过采样 可以将12位的ADC提升到16位 非常实用 根据过采样技术 每提高1位ADC分辨率 需要增加
  • CSV文件简介及C++实现

    逗号分隔值 Comma Separated Values CSV 有时也称为字符分隔值 因为分隔字符也可以不是逗号 其文件以纯文本形式存储表格数据 数字和文本 纯文本意味着该文件是一个字符序列 不含必须象二进制数字那样被解读的数据 CSV文
  • Java之继承

    继承 继承 为什么使用继承 继承是什么 继承的语法 访问父类成员 访问父类成员变量 访问父类成员方法 super关键字 子类构造方法 super和this 异同 分别的使用方法 继承的方式 final关键字 作者简介 zoro 1 目前大一
  • 解决安装android studio时用户文件夹为中文名

    第一步 使用登陆管理员账号登陆电脑 更改c盘用户文件夹的名字 创建管理员账户 百度经验 第二步 win r调出运行界面 输入regedit 依此进入 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows
  • Python读取Excel,日期列读出来是数字的处理

    Python读取Excel 里面如果是日期 直接读出来是float类型 无法直接使用 通过判断读取表格的数据类型ctype 进一步处理 返回的单元格内容的类型有5种 ctype 0 empty 1 string 2 number 3 dat
  • Spring学习总结【二】---IoC(控制反转)

    文章目录 IoC理论推导 IoC本质 工作原理 IoC创建对象的方式 IoC理论推导 在我们之前的业务中 用户的需求可能会影响我们原来的代码 我们需要根据用户的需求去修改原代码 如果程序代码量十分大 修改一次的成本代价十分昂贵 之前 程序是
  • 免费送书啦!细数Github大神们的开源书籍![二]

    计算机软件设计 软件设计的哲学 软件设计的哲学 斯坦福教授 Tcl 语言发明者 John Ousterhout 的著作 A Philosophy of Software Design 自出版以来 好评如潮 按照 IT 图书出版的惯例 如果冠
  • 第八课,OpenGL光照之基本光照

    冯氏光照模型 Phong Lighting Model 环境光照 Ambient Lighting 即使在黑暗的情况下 世界上通常也仍然有一些光亮 月亮 远处的光 所以物体几乎永远不会是完全黑暗的 为了模拟这个 我们会使用一个环境光照常量
  • 程序员如何找到女朋友?

    文 转载自公众号51CTO技术栈 生活中我们常常发现很多程序员拿着高薪 却常常沦为单身狗 每当情人节来临 却只能形单影只的一个人 过得十分凄惨 自从程序员毕业出来工作进入 IT 行业之后 常常接触不到女性 一不小心就到了被催恋催婚的年纪 前