人工智能开发常用编程语言

编程语言有很多种。各有所长!编程者能学会的、能解决问题的语言,就是好的编程语言。 »Learn more »

健身

程序员的形象往往是羸弱或虚胖的,且不说各种程序员猝死的传闻,或是颈椎病、腰椎病、肩周炎这些耳熟能详的职业病,光是我们的身材就有超过职业发展速度的趋势。锻炼能够提高身体素质,增强宝宝免疫力,以后加班到天亮也不怕啦。 颈椎操动图,减肥动图,赶快拿走,拯救你的颈椎,拯救你的大肚子!


复杂链表的复制

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 解析: 对于复杂链表的复制,不易直接复制,应该在原链表每个元素后插入相同元素,并复制新链表特殊指针,然后拆分原链表和复制的链表 ```python # -*- coding:utf-8 -*- # class RandomListNod


C++类型转换总结

# C++类型转换 类型转换就是将给定类型的表达式转换为另一种类型。C++中的转型可分为两种:隐式类型转换和显式类型转换。下面将详细介绍这两种转型操作,以及各自的适用场景,潜在问题,最终将总结使用类型转换操作应牢记的原则。 # 一、隐式类型转换 C语言中的类型转换属于旧式的类型转换,其使用比较简单,只要在待转换的变量前加上转换的类型即可,然后括号可以加在原变量上面,也可以加在类型名称上面。旧式类型转换在代码中不容易分辨(无论是对人还是对程序),并且


多态

# 多态 多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C\+


Rocks cluster笔记——Rocks安装的一些常见问题

常见问题和命令 1.永久关闭防火墙: rocks run host "chkconfig iptables off" 2.增加环境变量: 全局变量 加入到 /etc/profile ​ 当前用户变量加入到 ~/.bashrc 3.设置系统时间 设置系统时间 date -s 20071215 date -s 15:35 如果要同时更改BIOS时间 在执行 clock -w 所有节点安装完成后: 4. ssh 其他


运算符重载

c\++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c\++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。 # 1.一般运算符重载 在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。成员函数的形式比较简单,就是在类里面定义了一个与操作符相关的函数。友元函数因为


字符及字符串

## 转义字符 ``` #include <stdio.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { char str[]="S\065AB"; printf("\n%d", sizeof(str)); //输出5. return 0; } //转义字符\ddd表示8进制, 是一个数 ,所以就有 4个字符 + '\0' 即


Django后台集成富文本编辑器simditor

网上有不少开源的富文本编辑器,比如simditor、ueditor、kindedtor、tinymce、CKEditor等,我试用了其中三个编辑器,simditor、ueditor、kindedtor。其中ueditor不仅体量大,写出的HTML代码杂乱冗余,而且在代码区内复制代码时会丢失缩进,很烦人,更重要的是丑。kindeditor没怎么用就扔了,还是因为丑。最后选择了simditor。


Cmake

CMake是一个跨平台的、开源的构建工具。cmake是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量.目前很多开源的项目都可以通过CMake工具来轻松构建工程,例如博客之前分享的openHMD、hidapi、OSVR-Core等等,代码的分享者提供源代码和相应的Cmake配置文件,使用者就可以非常方便的在自己的电脑上构建相应的工程,进行开发和调试。


new分配空间及初始化

## 在C++primer(第5版)中关于new的讨论有 ### 1、new当个对象 new在自由空间分配内存,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象的指针。 ``` int *pi = new int; // pi指向一个动态分配的,未初始化的无名对象 ``` 此new表达式在自由空间构造一个int类型对象,并返回指向该对象的指针。 默认情况下,动态分配的对象是默认初始化的,这意味着内置类型或组合类型的对象的值是


C++命名空间

+ 掌握:命名空间的作用及定义;如何使用命名空间。 + 了解:使用早期的函数库 重点、难点 - 命名空间的作用及定义;如何使用命名空间。 - 在学习本书前面各章时,读者已经多次看到在程序中用了以下语句: ``` using namespace std; ``` 这就是使用了命名空间std。在本讲中将对它作较详细的介绍。 ## 一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来


C++静态成员变量和静态成员函数

# C++静态成员变量和静态成员函数 [转][原文](http://blog.163.com/sunshine_linting/blog/static/448933232011810101848652/) > 注意: 类中静态变量在类外初始化格式: <数据类型><类名>::<静态数据成员名>=<值> 加上声明是为了在构造函数之前运行。 ``` private: int a,b,c; static const int Sum[];/


同一进程中的线程究竟共享哪些资源

# 同一进程中的线程究竟共享哪些资源 分类: LINUX > **线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。** 进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括: 1.线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。


人工智能图谱解析

机器学习和深度学习是最近红的发紫的热点技术。也算是工作需要,我自己也找了一些学习资料来学习,先从基础开始,逐步深入,计划结合智能运维,分析下人工智能和设备运维的价值和前景。 本篇文章只是把AI学习资料和AI体系架构分享出来,我个人的分析成果也会陆续分享呈现给小伙伴们。下面先从人工智能发展历史、内涵外延、技术体系、行业应用等各个方面,通过思维导图的方式呈现出来,希望对大家学习AI能起到一定的引导作用。(本文AI相关体系架构图


‘=‘是拷贝构造,还是赋值?

观察代码: ``` #include<iostream> using namespace std; class MyClass { public: MyClass(int i = 0) { cout << i; } MyClass(const MyClass &x) { cout << 2; } MyClass &operator=(const MyClass &x)


类成员函数重载、覆盖、隐藏

## 类成员函数重载、覆盖、隐藏 a.成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 b.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual 关键字。 c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则


C++对齐方式

## C++对齐方式 编译器要对c++代码进行编译时需要按照相应的类型为变量分配内存空间,最为人们熟知的就是那五个空间了:栈,堆,全局数据区,常量区和代码区。现在知道了哪些变量存放在哪些空间里了,但是在相应的空间里又是如何存放的呢? ## gcc linux 或默认字节对齐方式 字节对齐的细节和具体编译器实现相关,但一般而言,满足三个准则: 1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2. 结构体每个成员相对于结构体首地址的


进程状态

进程状态 三态模型:在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化。进程一般有3种基本状态:运行、就绪和阻塞。 (1)运行:当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。 (2)就绪:当一个进程获得了除处理机以外的一切所需资源,一旦得到处理机即可运行,


软件设计模式演变

UI层的设计模式——从Script、Code Behind到MVC、MVP、MVVM 因为人的能力并没有“跟上”机器,所以才会出现各种模式、方法、工具等等来补足人的不足,以最大地透支机器性能。就像我前几天在闪存无聊时突然想到的一句: **架构是对客观不足的妥协,规范是对主观不足的妥协**。 当我们需要机器做的事情多了起来,我们就没办法在一个芯片上解决所有事情,所以才会有冯诺依曼模型、计算机架构,没办法用一台机器解决,所以才要互联网、分布式、云计算。 同样,随着计算机的发展,**要做的事情多了,就出现了软件的概念**。当“开发”正式化,我们需求的软件就变得:**功能繁杂、管理统一、多入口**。 **真正变化的不是客观本质,而是需求**。就像这里说的“软件入口”在客观上我们还是只有一个,原理上始终都只有一个启动程序、一个启动代码片段。但**“软件的入口”,已经从指代Main函数变成了指代起始UI,用户已经从指代专业人士变成了指代一般消费者,先有软件的需求,才有软件的定义,而需求是在变化的**。


指针

# 1.字符常量的指针 常量字符串位于常量区,编译器一般都只保留一份,不会有重复,所以,相同字符串地址相同。char *str = "microsoft",也是将常量区中字符串的起始地址赋值给str,但我们不能通过str修改那个字符串,否则程序会崩溃,因为它在常量区。 ``` #include <stdio.h> int main(int argc, char *argv[]) { char *s = "duzejie"; printf("%d %