编程七七八八札记

2024-02-28 22:59
文章标签 编程 札记 七七八八

本文主要是介绍编程七七八八札记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、Python 有两种错误很容易辨认:语法错误和异常。

Python 的语法错误或者称之为解析错,是初学者经常碰到的。

即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

2、Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

3、

socket.socket([family[, type[, proto]]])

参数

  • family: 套接字家族可以使 AF_UNIX 或者 AF_INET。
  • type: 套接字类型可以根据是面向连接的还是非连接分为 SOCK_STREAM 或 SOCK_DGRAM
  • protocol: 一般不填默认为 0。

4、函数最重要的目的是方便我们重复使用相同的一段程序。 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。

5、我们之前看到了函数和对象。从本质上来说,它们都是为了更好的组织已经有的程序,以方便重复利用。

模块(module)也是为了同样的目的。在Python中,一个.py文件就构成一个模块。通过模块,你可以调用其它文件中的程序。

6、模块包

可以将功能相似的模块放在同一个文件夹(比如说this_dir)中,构成一个模块包。

该文件夹中必须包含一个__init__.py的文件,提醒Python,该文件夹为一个模块包。__init__.py可以是一个空文件。

7、SQL语句中的参数,使用"?"作为替代符号,并在后面的参数中给出具体值。这里不能用Python的格式化字符串,如"%s",因为这一用法容易受到SQL注入攻击。

8、在我们接触的对象中,有一类特殊的对象,是用于存储数据的。常见的该类对象包括各种数字,字符串,表,词典。在C语言中,我们称这样一些数据结构为变量。而在Python中,这些是对象。

对象是储存在内存中的实体。但我们并不能直接接触到该对象。我们在程序中写的对象名,只是指向这一对象的引用(reference)。引用和对象分离,是动态类型的核心。引用可以随时指向一个新的对象。

Python会自动将没有引用指向的对象销毁(destruct),释放相应内存。

9、对于小的整数和短字符串,Python会缓存这些对象,而不是频繁的建立和销毁。

10、即使是多个引用指向同一个对象,如果一个引用值发生变化,那么实际上是让这个引用指向一个新的引用,并不影响其他的引用的指向。从效果上看,就是各个引用各自独立,互不影响。

11、空白字符(例如空格,tab缩进)

12、C#中委托的理解

在C#中,委托(delegate)是一种引用类型,在其他语言中,与委托最接近的是函数指针,但委托不仅存储对方法入口点的引用,还存储对用于调用方法的对象实例的引用。

简单的讲委托(delegate)是一种类型安全的函数指针

在C#中,我们可以使用委托(delegate)来实现函数指针的功能,也就是说,我们可以像使用函数指针一样,在运行时利用delegate动态指向具备相同签名的方法(所谓的方法签名,是指一个方法的返回值类型及其参数列表的类型)。

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

13在C#中 "+="有两种运用场合。

第一种,用在数值后面作为逻辑运算符,自加变量,如:int i=0;for(int j=0;j<5;j++){i+=5;}i的最终结果是25;

第二种,叫订阅事件,用在操作类名后winForm.Closed += new EventHandler(child_Closed);这句话意思是winForm的关闭结束事件订阅child_Closed方法,变量句柄类型为EventHandler常规事件句柄类型

14、PHP Static、final理解

(1)Static 关键字

声明类属性或方法为 static(静态),就可以不实例化类而直接访问。

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。只能用“::” (范围解析运算符)

(2)Final 关键字

PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

(3)调用父类构造方法

PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。

(4)我们的子类可以定义父类签名中不存在的可选参数

15、Delphi中类的自定义事件,事件其实是一个指针,指向一个过程,属于一个对象。 

(1)先定义一个过程类型,再定义一个类,这个类包含上面定义的过程类型的变量

(2)事件本身也是属性,所以在Published区定义OnScoreFull属性。

(3)接下来我们定义事件的挂载,我们在类的构造函数中就将事件处理方法赋给类的过程类型的字段

16、关于实例化

定义一个A a;

假设定义了一个a 如果你不实例化也就是 a = new A();

那么系统不会为a开辟任何空间,只有 a = new A();了 系统才会在内存中为 a 开辟一段空间,才真正有了a的存在

17、回调函数理解

18、事件理解

  1. 事件(Event):一个事件是在业务过程的流程中发生的,并影响业务过程中活动的执行顺序与执行时间的事情。事件用带有不同边界的小圆表示,以区别初始事件(细实线)、中间事件(双实线)和终止事件(粗实线)。在图形内部显示图标以便于区分触发器和事件结果。

事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。对于初学者,总会对Qt中信号和事件的概念混淆不清。其实,记住事件比信号更底层就可以了。比如说,我们用鼠标按下界面上的一个按钮,它会发射clicked()单击信号,但是,它怎么知道自己被按下的呢,那就是通过鼠标事件处理的。这里可以看到,鼠标事件比信号更底层。

在Qt中处理事件有多种方法,不过最常用的是重写Qt事件处理函数。

在前一篇中我们介绍了键盘和鼠标事件,其实还有一个非常常用的事件,就是定时器事件,如果要对程序实现时间上的控制,那么就要使用到定时器。而随机数也是很常用的一个功能,在我们要想产生一个随机的结果时就要使用到随机数。

一、定时器

Qt中有两种方法来使用定时器,一种是定时器事件,另一种是使用信号和槽。一般使用了多个定时器时最好使用定时器事件来处理。

事件流描述范例:

19、对任务管理部分理解

20、对数据管理部分的理解

21、重构对象设计模型

22、多态概念理解

多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。

C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。

23、我们喜欢在程序中使用指针代替数组,因为变量指针可以递增,而数组不能递增,因为数组是一个常量指针。

24、指针运算

假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,

ptr++

在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节。

25、指针和数组并不是可以完全互换的

#include <iostream>using namespace std;
const int MAX = 3;int main ()
{int  var[MAX] = {10, 100, 200};for (int i = 0; i < MAX; i++){*var = i;    // 这是正确的语法var++;       // 这是不正确的}return 0;
}

把指针运算符 * 应用到 var 上是完全可以的,但修改 var 的值是非法的。这是因为 var 是一个指向数组开头的常量,不能作为左值。

由于一个数组名对应一个指针常量,只要不改变数组的值,仍然可以用指针形式的表达式。例如,下面是一个有效的语句,把 var[2] 赋值为 500:

*(var + 2) = 500;

上面的语句是有效的,且能成功编译,因为 var 未改变。

26、指向指针的指针

指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。

指针的指针就是将指针的地址存放在另一个指针里面。

通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。

27、面向对象理解

“对象”是计算机抽象世界的一种方式。“面向对象”可以用很多方式表达。下面是一种并不精确,但比较直观的理解方式:

  1. 世界上的每一个事物都可以称为一个对象(object),比如张三。对象有身份(Identity),状态(State)和行为(Behavior)。
  2. 对象的状态由数据成员(data member)表示。数据成员又被称作域(field)。我们用其他对象作为该对象的数据成员。比如一个表示身高的整数,比如一个鼻子。
  3. 对象的行为由成员方法(member method)表示。我们简称为方法(method)。一个对象可以有多个方法,比如呼吸,睡觉。
  4. 对象可以归类(class),或者说归为同一类型(type)。同一类型的对象有相同的方法,有同类型的数据成员。某个类型的一个对象被称为该类型的一个实例(instance)。 

28、一个数据结构的实现有两方面: 1. 数据结构的内存表达方式; 2. 定义在该数据结构上的操作。

29、引用的理解

Human aPerson = new Human(160);

创建了一个Human类的对象aPerson。

上面是一个非常简单的表述,但我们有许多细节需要深入:

  1. 首先看等号的右侧。new是在内存中为对象开辟空间。具体来说,new是在内存的堆(heap)上为对象开辟空间。这一空间中,保存有对象的数据和方法。
  2. 再看等号的左侧。aPerson指代一个Human对象,被称为对象引用(reference)。实际上,aPerson并不是对象本身,而是类似于一个指向对象的指针。aPerson存在于内存的栈(stack)中。
  3. 当我们用等号赋值时,是将右侧new在堆中创建对象的地址赋予给对象引用。

这里的内存,指的是JVM (Java Virtual Machine)虚拟出来的Java进程内存空间。

栈的读取速度比堆快,但栈上存储的数据受到有效范围的限制。在C语言中,当一次函数调用结束时,相应的栈帧(stack frame)要删除,栈帧上存储的参量和自动变量就消失了。Java的栈也受到同样的限制,当一次方法调用结束,该方法存储在栈上的数据将清空。在 Java中,所有的(普通)对象都储存在堆上。因此,new关键字的完整含义是,在堆上创建对象。

30、计算机最重要的功能是处理数据。一个有用的计算机语言需要拥有良好的IO功能,以便让未处理的数据流入程序,让已处理的数据流出。 

31、Class类的加载

当Java创建某个类的对象,比如Human类对象时,Java会检查内存中是否有相应的Class对象。

如果内存中没有相应的Class对象,那么Java会在.class文件中寻找Human类的定义,并加载Human类的Class对象。

在Class对象加载成功后,其他Human对象的创建和相关操作都将参照该Class对象。

32、多线程理解

传统意义上,多线程是由操作系统提供的功能。对于单核的CPU,硬件中只存在一个线程。在操作系统的控制下,CPU会在不同的任务间(线程间)切换,从而造成多任务齐头并进的效果。这是单CPU分时复用机制下的多线程。现在,随着新的硬件技术的发展,硬件本身开始提供多线程支持,比如多核和超线程技术。然而,硬件的多线程还是要接受操作系统的统一管理。在操作系统之上的多线程程序依然通用。

多个线程可以并存于同一个进程空间。在JVM的一个进程空间中,一个栈(stack)代表了方法调用的次序。对于多线程来说,进程空间中需要有多个栈,以记录不同线程的调用次序。多个栈互不影响,但所有的线程将共享堆(heap)中的对象。

33、多任务编程的难点

多任务编程的难点在于多任务共享资源。对于同一个进程空间中的多个线程来说,它们都共享堆中的对象。某个线程对对象的操作,将影响到其它的线程。

在多线程编程中,要尽力避免竞争条件(racing condition),即运行结果依赖于不同线程执行的先后。线程是并发执行的,无法确定线程的先后,所以我们的程序中不应该出现竞争条件。

然而,当多任务共享资源时,就很容易造成竞争条件。我们需要将共享资源,并造成竞争条件的多个线程线性化执行,即同一时间只允许一个线程执行。

34、变量的作用范围

简单地说,变量可以分为全局变量和局部变量。在所有函数之外声明的变量为全局变量,比如glob,在任何时候都可以使用。在函数内定义的变量为局部变量,只能在该函数的作用域(range)内使用,比如说我们在inner()工作的时候不能使用main()函数中声明的main1变量,而在main()中我们无法使用inner()函数中声明的inner2变量。 

35、assert参考

ASSERT() 是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为 FALSE (0), 程序将报告错误,并终止执行。如果表达式不为 0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。

ASSERT 只有在 Debug 版本中才有效,如果编译为 Release 版本则被忽略。

36、解决方案与工程的概念

每个应用程序都作为一个工程来处理,它包含了头文件、源文件和资源文件等,这些文件通过工程集中管理。在VS2010中,工程都是在解决方案管理之下的。一个解决方案可以管理多个工程,可以把解决方案理解为多个有关系或者没有关系的工程的集合。VS2010提供了一个Solution Explorer解决方案浏览器视图,可以显示当前解决方案的内容,当新建一个工程时可以选择新建一个解决方案还是加入当前解决方案。

37、何谓消息、消息处理函数、消息映射?
消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作是你的一系列代码。称为消息处理函数。

38、文档、视图和框架简介

       在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工程Example34中,我们可以看到MFC向导自动为我们生成了CExample34Doc类、CExample34View类和CMainFrame类,它们就分别是文档类、视图类和框架窗口类。

       文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展。下面分别介绍这种结构中涉及到的几个重要概念。

       文档

       文档对象用于管理和维护数据,包括保存数据、取出数据以及修改数据等操作,在数据被修改以后,文档可以通知其对应的所有视图更新显示。

       视图

       视图对象将文档中的数据可视化,负责从文档对象中取出数据显示给用户,并接受用户的输入和编辑,将数据的改变反映给文档对象。视图充当了文档和用户之间媒介的角色。

       框架

       一个文档可能有多个视图界面,这就需要有框架来管理了。框架就是用来管理文档和视图的。框架窗口是应用程序的主窗口,应用程序执行时会先创建一个最顶层的框架窗口。视图窗口是没有菜单和边界的子窗口,它必须包含在框架窗口中,即置于框架窗口的客户区内。

       文档模板

       文档模板中存放了与文档、视图和框架相关的信息。应用程序通过文档模板创建文档对象、框架窗口对象和视图对象。另外,文档、视图和框架之间的关系也是由文档模板来管理的。

39、delphi指针类型 

指针的声明:
var ansiStr :^AnsiString;
或先声明类型在声明变量:
type pansiStr = ^AnsiString;
var ansiStr:pansiStr;

指针的赋值:
方式有二,即将另一指针变量值赋给该指针变量,此两个变量指向同一个地址;或者将某个变量的地址赋给该变量。
@取址符 如@ansiStr
^取值符 如ansiStr^

40、解决软件中文乱码的方法

我们发现,在代码中来设置按钮的中文文本出现了乱码。这个可以有两种方法来解决,一个就是在编写程序时使用英文,当程序完成后使用Qt语言家来翻译整个软件中的显示字符串;还有一种方法就是在代码中设置字符串编码,然后使用函数对要在界面上显示的中文字符串进行编码转换。因为翻译一个软件很麻烦,对于这些小程序,我们希望中文可以立即显示出来,所以下面来讲解第二种方法。 

41、变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

42、Windows消息事件

当用户在窗口中画图时,按下鼠标左键,此时操作系统会感知此事件,于是将事件包装成一个消息,投递到应用程序的消息队列中,等待应用程序的处理。然后,应用程序通过一个消息循环不断地从消息队列中取出消息,并进行响应。在这个处理过程中,操作系统会给应用程序发送消息,实际是操作系统调用程序中一个专门负责处理消息的函数,这个函数成为窗口过程。

43、对象参数没var传递的是对象的对象引用副本,带var传递的是对象的对象引用

下面的单击事件,将要调用一个以对象为参数的方法,并将结果显示出来。

procedure TForm1.btn1Click(Sender: TObject);
var
lStrings: TStrings;
begin
lStrings:= TStringList.Create;
try
    lStrings.Add('chen');
    GetOperatorAllDeptIDs(lStrings);
    ShowMessage(lStrings.Text);
finally
    lStrings.Free;
end;

 

调用方法一:

function GetOperatorAllDeptIDs( AStrings: TStrings):String;
begin
//注释 AStrings:= TStringList.Create;
AStrings. Add('zhi');
end;

返回结果为:chen zhi

分析:此时传递的AStrings 为lStrings对象的对象引用副本,即也指向对象lStrings,所以当执行AStrings. Add('zhi');时操作为lStrings对象添加‘zhi’。

 

调用方法二:

function GetOperatorAllDeptIDs( var AStrings: TStrings):String;
begin
//注释 AStrings:= TStringList.Create;
AStrings. Add('zhi');
end;

返回结果为:chen zhi

分析:此时传递的AStrings 为lStrings对象的对象引用,当执行AStrings. Add('zhi');时操作的对象为lStrings对象。

 

调用方法三:

function GetOperatorAllDeptIDs( AStrings: TStrings):String;
begin
AStrings:= TStringList.Create;
AStrings. Add('zhi');
end;

返回结果为:chen

分析:此时传递的AStrings 为lStrings对象引用的副本,当方法中执行AStrings:= TStringList.Create;又将对象引用副本 的引用指向了此时新建的一个对象,所以此时对AStrings的任何操作已经不会影响lStrings对象。

 

调用方法四:

function GetOperatorAllDeptIDs( var AStrings: TStrings):String;
begin
AStrings:= TStringList.Create;
AStrings. Add('zhi');
end;

返回结果为:zhi

分析:此时传递的AStrings 为lStrings对象的对象引用,当方法中执行AStrings:= TStringList.Create;时, lStrings这个对象引用指向了新建的AStrings对象。所以,lString的值为’Zhi’

44、Delphi Record记录类型里string一定要限制长度,否则内存时偶尔会越界

45、事件和操作区别:事件更强调时间性,即在什么时间点发生,而操作时间性没事件严格,它更强调的是行为 

47、mvc的理解(mset:MVC sets)

48、Delphi默认初始化的变量是全局变量,类成员、函数体内局部变量不会初始化 

49、浮点型格式化函数:SysUtils.FormatFloat('0.00',1.8875),结果为:1.89 

SysUtils.FormatFloat('0.000',1.8875),结果为:1.888

50、 间隔时间执行程序

nowTimeTick  :=GetTickCount;if(nowTimeTick-Self.TimeRecordTick>=(3*60000))thenbeginSelf.TimeRecordTick :=nowTimeTick;

51、Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器

52、设计模式简介

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

53、开放封闭原则

关于开放封闭原则,其核心的思想是:

软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

因此,开放封闭原则主要体现在两个方面:

对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

“需求总是变化”、“世界上没有一个软件是不变的”,这些言论是对软件需求最经典的表白。从中透射出一个关键的意思就是,对于软件设计者来说,必须在不需要对原有的系统进行修改的情况下,实现灵活的系统扩展。而如何能做到这一点呢?

只有依赖于抽象。实现开放封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以对修改就是封闭的;而通过面向对象的继承和对多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展方法,所以对于扩展就是开放的。这是实施开放封闭原则的基本思路,同时这种机制是建立在两个基本的设计原则的基础上,这就是Liskov替换原则和合成/聚合复用原则。

对于违反这一原则的类,必须进行重构来改善,常用于实现的设计模式主要有Template Method模式和Strategy模式。而封装变化,是实现这一原则的重要手段,将经常发生变化的状态封装为一个类。

54、MessageBox使用Application.handle和self.handle的区别就是

Application.handle提示框会躲到当前窗口后面而self.handle不会

55、实体类:实体的类型(class),也叫对象类 。

56、一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。(原型模式) 

57、认识某个对象时可联系各种数据结构猜测它可能有什么样的属性 

58、对 ShellExecute 函数参数的理解,其中关键参数是第 2 个参数,指定了操作的行为 “runas”,以管理员身份运行 

59、实现开机自动启动程序,delphi7写32位程序到注册表:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

需要定义:const KEY_WOW64_64KEY = $0100;

Reg := TRegistry.Create(KEY_ALL_ACCESS or KEY_WOW64_64KEY);

Win7以后系统如果是32位应用程序会写到下面注册表路径下 

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run 

60、引用{$R   WindowsXP.res}再引用{$R  uac.res}就不会生效 

61、Delphi更改.exe文件图标

Project——Options…——Application,点击Load Icon…
可以修改icon
很多朋友会发现,咦,我按照这种方法改了之后,并没有看到效果,

重点就在于电脑有一个缓存机制,此时只需要将工程文件夹换一个存储地方,就会发现图标就改了。 

用下面方法也可以,把下面cmd命令保存成bat文件,运行之,然后重新编译生成exe,图标就可改变

rem 关闭 Windows 外壳程序 Explorertaskkill /f /im explorer.exerem 清理系统图标缓存数据库attrib -h -s -r "%userprofile%\AppData\Local\IconCache.db"del /f "%userprofile%\AppData\Local\IconCache.db"attrib /s /d -h -s -r "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\*"del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_32.db"del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_96.db"del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_102.db"del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db"del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_1024.db"del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_idx.db"del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_sr.db"rem 清理系统托盘记忆的图标echo y reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v IconStreamsecho y reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v PastIconsStreamrem 重启 Windows 外壳程序 Explorerstart explorer

62、事件作用:可用于传递信号、触发动作及传递参数 

63、注释代码块可以把代码块包括到函数或过程中 

64、类中的方法是具体的方法,而不是抽象方法,否则的话,在具体的子类中仍要实现所有的方法 

65、面向对象分析的三个模型和五个层次

66、新的线程与主线程的关系

          主线程也叫界面线程,就是窗体应用程序启动时,对应进程创建的第一条线程,该线程负责:
          1. 创建窗体、创建窗体上的控件。
          2. 响应键盘消息、鼠标消息等Windows消息。
          3. 负责创建新线程和其他事情。

          主线程以外的新线程也叫作工作线程,负责处理具体的事务。主线程创建新线程后,可以让新线程立即运行,也可以让它稍后运行。

​​​​​​67、service层和manager层的区别

service层是相对于具体的业务逻辑服务层。

manager层是通用业务逻辑处理层。

  例如:对第三方平台封装的层,预处理返回结果及转化异常信息;

     对Service层通用能力的下沉,如缓存、中间件处理等;

     与DAO层交互,对多个DAO的组合服用。

manage是提供管理用的对象,比如资源管理,你添加的各种资源,都可以通过它去访问
service是服务,就像一个程序,可以做关于你业务逻辑的东西

 Manager一般是指程序层面的,有很多功能的,范围比较大,而Service指的是服务,一个比较微观的概念,不过具体怎么命名,其实都可以,看你的项目怎么约定的,主要是要统一。

Manager是管理类,提供接口。
service是实现类,提供准确的方法。或者是实现接口。

68、对函数理解

函数是基本的代码块,用于执行一个任务。

Go 语言最少有个 main() 函数。

你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。

函数声明告诉了编译器函数的名称,返回类型,和参数。

69、变量是一种使用方便的占位符,用于引用计算机内存地址。

70、一个指针变量指向了一个值的内存地址

指针使用流程:

  • 定义指针变量。
  • 为指针变量赋值。
  • 访问指针变量中指向地址的值。

71、用组合关系代替继承关系

例如:桥接模式 

72、delphi线程池的原理

delphi线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。可能你也许会问:为什么要搞得这么麻烦,如果每当客户端有新的请求时,我就创建一个新的线程不就完了?这也许是个不错的方法,因为它能使得你编写代码相对容易一些,但你却忽略了一个重要的问题??性能!就拿我所在的单位来说,我的单位是一个省级数据大集中的银行网络中心,高峰期每秒的客户端请求并发数超过100,如果为每个客户端请求创建一个新线程的话,那耗费的CPU时间和内存将是惊人的,如果采用一个拥有200个线程的线程池,那将会节约大量的的系统资源,使得更多的CPU时间和内存用来处理实际的商业应用,而不是频繁的线程创建与销毁。 

73、一般过程和方法是不一样,方法是基于类的,类具有保持信息的功能,而一般过程没有类保持信息 

74、轮循可以用循环控制、线程、定时器、标签跳转(goto)

75、DELPHI方法注释的标准写法

/// <summary>
/// 查询数据
/// </summary>
/// <param name="accountno">帐套号</param>
/// <param name="sql">SQL语句</param>
/// <returns>查询到的数据</returns>

76、类和类之间抽象偶合,抽象类中实现部位类操作 

77、过程当函数,返回值放在引用参数(传址参数)中 

78、事件五要素

79、Delphi静态数组的地址与其第一个元素的地址相同,但是,动态数组的内存地址与第一个元素的地址不同

AStream.ReadBuffer(Pointer(DataValue)^, L);相当于AStream.ReadBuffer(DataValue[1], L);

 

这篇关于编程七七八八札记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/756878

相关文章

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

Java并发编程之——BlockingQueue(队列)

一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种: 1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作123 因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另一个线程做了出队列操作;同样,当一个线程试图对一个空

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/zhujiatc@126/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方