jeff_

jeff_ 查看完整档案

九江编辑  |  填写毕业院校  |  填写所在公司/组织 www.flowerdeer.cn/ 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

jeff_ 提出了问题 · 2019-04-27

解决hexo-next 配置头像以及链接图标不显示

图片描述

图片描述

图片描述

小弟新手一枚,想自己配个博客写文章。 基本框架打好了,现在美化。
但是参考网上文章自己修改代码,发现头像以及链接UI不显示。
而且一旦不小心写错了,网站直接就白屏了。
请问下怎么解决相关问题?

已经尝试过: hexo clean , 路径用" "引起来 ,更改为jpg后缀(图片也是RGB格式)。

        图片存放位置没有问题,因为有默认的图片,可是默认图片也不显

我的网站:https://www.flowerdeer.xyz/

关注 1 回答 1

jeff_ 提出了问题 · 2019-04-03

解决能利用IDE工具更加方便查找C库源代码吗

比如我在IDE浏览C库中floor()的定义,使用转到定义,
clipboard.png
_Check_return_ _ACRTIMP double __cdecl floor(_In_ double _X); 这里我就找不到后面的代码定义了,是我操作错误了吗?

请问:
编译器是如何实现寻找代码的定义的?它是不是只能寻找添加到工程的定义函数,而不能寻找封装的库?
如果要阅读源代码需要自己去根目录找对应头文件阅读吗?

关注 2 回答 1

jeff_ 提出了问题 · 2019-04-03

解决能利用IDE工具更加方便查找C库源代码吗

比如我在IDE浏览C库中floor()的定义,使用转到定义,
clipboard.png
_Check_return_ _ACRTIMP double __cdecl floor(_In_ double _X); 这里我就找不到后面的代码定义了,是我操作错误了吗?

请问:
编译器是如何实现寻找代码的定义的?它是不是只能寻找添加到工程的定义函数,而不能寻找封装的库?
如果要阅读源代码需要自己去根目录找对应头文件阅读吗?

关注 2 回答 1

jeff_ 赞了文章 · 2019-03-19

面试点滴

语言面试题

#include <iostream>

using namespace std;

class A
{
public:
    A() : m_ival(0)
    {
        test();
    }

    virtual void func()
    {
        cout << m_ival << endl;
    }

    void test()
    {
        func();
    }

public:
    int m_ival;
};

class B : public A
{
public:
    B()
    {
        test();
    }

    void func()
    {
        ++ m_ival;
        cout << m_ival << endl;
    }
};

int main()
{
    A* p = new B;

    p->test();
    
    delete p;

    return 0;
}
问 1:分析下面的程序,给出运行结果

输出:

0
1
2
问 二 :在子类与父类构造函数中都调用test(), 那么编译器是怎么确定应该调用的哪个 func() 函数版本呢?

相关概念:

  • 构造函数未结束前,虚函数表未初始化完成,因此不能发生多态
  • 动态联编不等价于多态:
    动态联编:编译原理中的概念
    多 态:面向对象理论。 C++ 编译器在实现面向对象的多态时,使用动态联编的概念

发生了什么?

  • 在构造 A 部分时:

    • 在构造 A 部分时,回去构造 A 部分的虚函数表。在执行 A 的构造函数的函数体时,虚函数表是【完整】的
    • 在 A 的构造函数中调用 Func(), 发生动态联编,查找虚函数表得到具体函数地址
    • A 中的 Func 被调用

clipboard.png

  • 在构造 B 部分时:

    • 在构造 B 部分时,【虚函数表被更新】
    • 在 B 的构造函数中调用 Func(), 发生动态联编,查找虚函数表得到具体函数地址
    • B 中的 Func 被调用

clipboard.png

总结:

  • 在构造函数中,调用虚函数不会发生多态,但虚函数是动态联编的
  • 虚函数的调用,都是通过查找虚函数表完成的
问 三:上述的代码是否有其它问题?
  • 问题 1, 未判断内存是否申请成功
  • 问题 2

    • A* p = new B; delete p;
    • A 类指针 p 指向 B 类对象,在 delete 时,析构函数不是虚函数,因此,编译器就只会根据 p 的类型调用 A 类的析构函数, B 类的析构函数不会被调用!!!
要点
  • 面试官需要的不只是“正确答案”
  • 面试官会想要知道应试者的解题思路
  • 面试官会从题中间“随机抓取”细节进行追问
  • 面试官会把问题进行扩展(如:从语言扩展到编译器)

算法面试题

HR 问:编写代码将一个链表反转打印

面试者:需要思考的问题

  • 这具体是一个什么样的链表(单链表?双向链表?循环链表)
  • 链表中节点的数据是否允许改变
  • 时间复杂度有没有要求
  • 。。。
struct Node
{
    int v;
    struct Node* next;
};
void reversse_display_list(struct Node* list)
{
    if( list )
    {
        reversse_display_list(list->next);

        printf("%d ", list->v);
    }
}
void reversse_display_list_stack(struct Node* list)
{
    if( list )
    {
        LinkStack<int> stack;

        while( list )   // O(n)
        {
            stack.push(list->v);

            list = list->next;
        }

        while( stack.size() > 0 )   // O(n)
        {
            printf("%d ", stack.top());

            stack.pop();
        }

        printf("\n");
    }
}
struct Node* reverse_list(struct Node* list) // O(n)
{
    if( list )
    {
        struct Node* guard = NULL;
        struct Node* next = list->next;

        while( next )
        {
            list->next = guard;
            guard = list;
            list = next;
            next = list->next;
        }

        list->next = guard;
    }

    return list;
}
要点
  • 面试不是笔试,面试考察的不只是技术
  • 面试官需要全方位考察应试者(沟通,品质,态度)
  • 面试中尽量与面试官交流,获取解题的有用信息
  • 面试中尽量写出完整代码,而不是纸上谈兵的忽悠
  • 。。。

发散性思维问题

不用加减乘除运算符做整数加法

面试者: 需要思考的问题

  • 面试官想考察什么?
  • 加法的底层本质是什么?
  • 是否可以绕开 “+” 操作符的使用
  • 。。。
int add_1(int a, int b)
{
    int ret = 0;

    asm volatile
    (
         "movl %%eax, %%ecx\n"
         "addl %%ebx, %%ecx\n"
         : "=c"(ret)
         : "a"(a), "b"(b)
    );


    return ret;
}

int add_2(int a, int b)
{
    int part = 0;
    int carry = 0;

    do
    {
        part = a ^ b;
        carry = (a & b) << 1;

        a = part;
        b = carry;
    } while( b != 0 );

    return a;
}
要点
  • 不同公司对人才的要求是不同的
  • 一些公司会更看重应试者的可塑性
  • 学习,分析,思考能力是工作中必备的(面试需要考察)
  • 计算机系统底层原理的学习必不可少
  • 。。。
查看原文

赞 1 收藏 0 评论 0

jeff_ 关注了标签 · 2019-03-19

c

C 语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。

C 语言是由 UNIX 的研制者丹尼斯·里奇(Dennis Ritchie)和肯·汤普逊(Ken Thompson)于 1970 年研制出的B语言的基础上发展和完善起来的。目前,C 语言编译器普遍存在于各种不同的操作系统中,例如 UNIX、MS-DOS、Microsoft Windows 及 Linux 等。C 语言的设计影响了许多后来的编程语言,例如 C++、Objective-C、Java、C# 等。

设计

C 语言是一个程序语言,设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C 语言也很适合搭配汇编语言来使用。尽管 C 语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的 C 语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称 MCU)以及超级电脑等作业平台。

  • C 语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。
  • C 语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。
  • 不同的变量类型可以用结构体(struct)组合在一起。
  • 只有 32 个保留字(reserved keywords),使变量、函数命名有更多弹性。
  • 部份的变量类型可以转换,例如整型和字符型变量。
  • 通过指针(pointer),C 语言可以容易的对存储器进行低级控制。
  • 编译预处理(preprocessor)让 C 语言的编译更具有弹性。

关注 10799

jeff_ 关注了标签 · 2019-03-19

c++

C++是一种静态数据类型检查的,支持多范型的通用程序设计语言。C++支持过程化程序设计、数据抽象化、面向对象程序设计、泛型程序设计、基于原则设计等多种程序设计风格。

关注 14782

jeff_ 关注了专栏 · 2019-03-19

周梦康

金三银四 还不上车补课?学了就是赚了 https://segmentfault.com/ls/1650000011318558

关注 4461

jeff_ 关注了专栏 · 2019-03-19

SegmentFault 社区运营

SegmentFault 思否社区管理官方专栏,在这里发布 SegmentFault 思否社区运营和管理相关的最新消息。

关注 18765

jeff_ 关注了专栏 · 2019-03-19

美团技术团队

“美团技术团队”,你最值得关注的技术团队官方微信公众号。 每周会推送来自一线的实践技术文章,涵盖前端(Web、iOS和Android)、后台、大数据、AI/算法、测试、运维等技术领域。 在这里,与8000多业界一流工程师交流切磋。

关注 12147

jeff_ 关注了专栏 · 2019-03-19

阿里云栖号

汇集阿里技术精粹-yq.aliyun.com

关注 18394

jeff_ 关注了专栏 · 2019-03-19

腾讯新闻前端团队

TNFE 腾讯新闻前端团队,专业的前端技术专栏,一线的前端技术文章。

关注 4723

jeff_ 关注了标签 · 2019-03-19

css

层叠样式表(英语:Cascading Style Sheets,简写CSS),又称串样式列表,由W3C定义和维护的标准,一种用来为结构化文档(如HTML文档或XML应用)添加样式(字体、间距和颜色等)的计算机语言。

关注 97858

jeff_ 关注了标签 · 2019-03-19

php

PHP,是英文超文本预处理语言 Hypertext Preprocessor 的缩写。PHP 是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML 中使用。PHP 的语法借鉴吸收 C语言、Java 和 Perl 等流行计算机语言的特点,易于一般程序员学习。(目前是 Web 开发性价比最高的语言)

关注 91813

jeff_ 关注了标签 · 2019-03-19

node.js

图片描述
Node 是一个 Javascript 运行环境(runtime)。实际上它是对 Google V8 引擎(应用于 Google Chrome 浏览器)进行了封装。V8 引擎执行 Javascript 的速度非常快,性能非常好。Node 对一些特殊用例进行了优化,提供了替代的 API,使得 V8 在非浏览器环境下运行得更好。例如,在服务器环境中,处理二进制数据通常是必不可少的,但 Javascript 对此支持不足,因此,V8.Node 增加了 Buffer 类,方便并且高效地 处理二进制数据。因此,Node 不仅仅简单的使用了 V8,还对其进行了优化,使其在各环境下更加给力。

关注 82074

jeff_ 关注了标签 · 2019-03-19

java

Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

Java编程语言的风格十分接近 C++ 语言。继承了 C++ 语言面向对象技术的核心,Java舍弃了 C++ 语言中容易引起错误的指針,改以引用取代,同时卸载原 C++ 与原来运算符重载,也卸载多重继承特性,改用接口取代,增加垃圾回收器功能。在 Java SE 1.5 版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。太阳微系统对 Java 语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言”。

版本历史

重要版本号版本代号发布日期
JDK 1.01996 年 1 月 23 日
JDK 1.11997 年 2 月 19 日
J2SE 1.2Playground1998 年 12 月 8 日
J2SE 1.3Kestrel2000 年 5 月 8 日
J2SE 1.4Merlin2002 年 2 月 6 日
J2SE 5.0 (1.5.0)Tiger2004 年 9 月 30 日
Java SE 6Mustang2006 年 11 月 11 日
Java SE 7Dolphin2011 年 7 月 28 日
Java SE 8JSR 3372014 年 3 月 18 日
最新发布的稳定版本:
Java Standard Edition 8 Update 11 (1.8.0_11) - (July 15, 2014)
Java Standard Edition 7 Update 65 (1.7.0_65) - (July 15, 2014)

更详细的版本更新查看 J2SE Code NamesJava version history 维基页面

新手帮助

不知道如何开始写你的第一个 Java 程序?查看 Oracle 的 Java 上手文档

在你遇到问题提问之前,可以先在站内搜索一下关键词,看是否已经存在你想提问的内容。

命名规范

Java 程序应遵循以下的 命名规则,以增加可读性,同时降低偶然误差的概率。遵循这些命名规范,可以让别人更容易理解你的代码。

  • 类型名(类,接口,枚举等)应以大写字母开始,同时大写化后续每个单词的首字母。例如:StringThreadLocaland NullPointerException。这就是著名的帕斯卡命名法。
  • 方法名 应该是驼峰式,即以小写字母开头,同时大写化后续每个单词的首字母。例如:indexOfprintStackTraceinterrupt
  • 字段名 同样是驼峰式,和方法名一样。
  • 常量表达式的名称static final 不可变对象)应该全大写,同时用下划线分隔每个单词。例如:YELLOWDO_NOTHING_ON_CLOSE。这个规范也适用于一个枚举类的值。然而,static final 引用的非不可变对象应该是驼峰式。

Hello World

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

编译并调用:

javac -d . HelloWorld.java
java -cp . HelloWorld

Java 的源代码会被编译成可被 Java 命令执行的中间形式(用于 Java 虚拟机的字节代码指令)。

可用的 IDE

学习资源

常见的问题

下面是一些 SegmentFault 上在 Java 方面经常被人问到的问题:

(待补充)

关注 142909

jeff_ 关注了标签 · 2019-03-19

python

Python(发音:英[ˈpaɪθən],美[ˈpaɪθɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句。

Python支持命令式程序设计、面向对象程序设计、函数式编程、面向切面编程、泛型编程多种编程范式。与Scheme、Ruby、Perl、Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理存储器使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python虚拟机本身几乎可以在所有的作业系统中运行。使用一些诸如py2exe、PyPy、PyInstaller之类的工具可以将Python源代码转换成可以脱离Python解释器运行的程序。

Python的主要参考实现是CPython,它是一个由社区驱动的自由软件。目前由Python软件基金会管理。基于这种语言的相关技术正在飞快的发展,用户数量快速扩大,相关的资源非常多。

关注 138471

jeff_ 关注了标签 · 2019-03-19

html

超文本标记语言(英文:HyperText Markup Language,HTML)是为“网页创建和其它可在网页浏览器中看到的信息”设计的一种标记语言。

关注 66414

jeff_ 关注了标签 · 2019-03-19

javascript

JavaScript 是一门弱类型的动态脚本语言,支持多种编程范式,包括面向对象和函数式编程,被广泛用于 Web 开发。

一般来说,完整的JavaScript包括以下几个部分:

  • ECMAScript,描述了该语言的语法和基本对象
  • 文档对象模型(DOM),描述处理网页内容的方法和接口
  • 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口

它的基本特点如下:

  • 是一种解释性脚本语言(代码不进行预编译)。
  • 主要用来向HTML页面添加交互行为。
  • 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。

JavaScript常用来完成以下任务:

  • 嵌入动态文本于HTML页面
  • 对浏览器事件作出响应
  • 读写HTML元素
  • 在数据被提交到服务器之前验证数据
  • 检测访客的浏览器信息

《 Javascript 优点在整个语言中占多大比例?

关注 177183

jeff_ 关注了标签 · 2019-03-19

vue.js

Reactive Components for Modern Web Interfaces.

Vue.js 是一个用于创建 web 交互界面的。其特点是

  • 简洁 HTML 模板 + JSON 数据,再创建一个 Vue 实例,就这么简单。
  • 数据驱动 自动追踪依赖的模板表达式和计算属性。
  • 组件化 用解耦、可复用的组件来构造界面。
  • 轻量 ~24kb min+gzip,无依赖。
  • 快速 精确有效的异步批量 DOM 更新。
  • 模块友好 通过 NPM 或 Bower 安装,无缝融入你的工作流。

官网:https://vuejs.org
GitHub:https://github.com/vuejs/vue

关注 138283

jeff_ 关注了标签 · 2019-03-19

mysql

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

关注 72819