黑马程序员面试技巧

2022-09-14

第一篇:黑马程序员面试技巧

黑马程序员:IOS面试宝典数据存储

数据存储(★★)

1、 IOS中常用的数据存储方式有哪些?

答:1.数据存储有四种方案,NSUserDefault,KeyChain,File,DB. 2.其中File有三种方式:plist,Archiver,Stream 3.DB包括core Data和FMDB

2、说一说你对sqlite的认识

SQLite是目前主流的嵌入式关系型数据库,其最主要的特点就是轻量级、跨平台,当前很多嵌入式操作系统都将其作为数据库首选。虽然SQLite是一款轻型数据库,但是其功能也绝不亚于很多大型关系数据库。学习数据库就要学习其相关的定义、操作、查询语言,也就是大家日常说得SQL语句。和其他数据库相比,SQLite中的SQL语法并没有太大的差别,因此这里对于SQL语句的内容不会过多赘述,大家可以参考SQLite中其他SQL相关的内容,这里还是重点讲解iOS中如何使用SQLite构建应用程序。先看一下SQLite数据库的几个特点:

1.基于C语言开发的轻型数据库

2.在iOS中需要使用C语言语法进行数据库操作、访问(无法使用ObjC直接访问,因为libqlite3框架基于C语言编写)

3.SQLite中采用的是动态数据类型,即使创建时定义了一种类型,在实际操作时也可以存储其他类型,但是推荐建库时使用合适的类型(特别是应用需要考虑跨平台的

情况时)

4.建立连接后通常不需要关闭连接(尽管可以手动关闭)

在iOS中操作SQLite数据库可以分为以下几步(注意先在项目中导入libsqlite3框架):

1.打开数据库,利用sqlite3_open()打开数据库会指定一个数据库文件保存路径,如果文件存在则直接打开,否则创建并打开。打开数据库会得到一个sqlite3类型的对象,后面需要借助这个对象进行其他操作。

2.执行SQL语句,执行SQL语句又包括有返回值的语句和无返回值语句。 3.对于无返回值的语句(如增加、删除、修改等)直接通过sqlite3_exec()函数执行;

4.对于有返回值的语句则首先通过sqlite3_prepare_v2()进行sql语句评估(语法检测),然后通过sqlite3_step()依次取出查询结果的每一行数据,对于每行数据都可以通过对应的sqlite3_column_类型()方法获得对应列的数据,如此反复循环直到遍历完成。当然,最后需要释放句柄。

3、说一说你对FMDB的认识

FMDB是一个处理数据存储的第三方框架,框架是对sqlite的封装,整个框架非常轻量级但又不失灵活性,而且更加面向对象。FMDB有如下几个特性:

1.FMDB既然是对于libsqlite3框架的封装,自然使用起来也是类似的,使用前也要打开一个数据库,这个数据库文件存在则直接打开否则会创建并打开。这里FMDB引入了一个MFDatabase对象来表示数据库,打开数据库和后面的数据库操作全部依

赖此对象。

2.对于数据库的操作跟前面KCDbManager的封装是类似的,在FMDB中FMDatabase类提供了两个方法executeUpdate:和executeQuery:分别用于执行无返回结果的查询和有返回结果的查询。当然这两个方法有很多的重载这里就不详细解释了。唯一需要指出的是,如果调用有格式化参数的sql语句时,格式化符号使用“?”而不是“%@”、等。

3.我们知道直接使用libsqlite3进行数据库操作其实是线程不安全的,如果遇到多个线程同时操作一个表的时候可能会发生意想不到的结果。为了解决这个问题建议在多线程中使用FMDatabaseQueue对象,相比FMDatabase而言,它是线程安全的。

4.将事务放到FMDB中去说并不是因为只有FMDB才支持事务,而是因为FMDB将其封装成了几个方法来调用,不用自己写对应的sql而已。其实在在使用libsqlite3操作数据库时也是原生支持事务的(因为这里的事务是基于数据库的,FMDB还是使用的SQLite数据库),只要在执行sql语句前加上“begin transaction;”执行完之后执行“commit transaction;”或者“rollback transaction;”进行提交或回滚即可。另外在Core Data中大家也可以发现,所有的增、删、改操作之后必须调用上下文的保存方法,其实本身就提供了事务的支持,只要不调用保存方法,之前所有的操作是不会提交的。在FMDB中FMDatabase有beginTransaction、commit、rollback三个方法进行开启事务、提交事务和回滚事务。

4、说一说你对Core Data的认识

Core Data使用起来相对直接使用SQLite3的API而言更加的面向对象,操作过

程通常分为以下几个步骤:

1.创建管理上下文

创建管理上下可以细分为:加载模型文件->指定数据存储路径->创建对应数据类型的存储->创建管理对象上下方并指定存储。

经过这几个步骤之后可以得到管理对象上下文NSManagedObjectContext,以后所有的数据操作都由此对象负责。同时如果是第一次创建上下文,Core Data会自动创建存储文件(例如这里使用SQLite3存储),并且根据模型对象创建对应的表结构。

2.查询数据

对于有条件的查询,在Core Data中是通过谓词来实现的。首先创建一个请求,然后设置请求条件,最后调用上下文执行请求的方法。

3.插入数据

插入数据需要调用实体描述对象NSEntityDescription返回一个实体对象,然后设置对象属性,最后保存当前上下文即可。这里需要注意,增、删、改操作完最后必须调用管理对象上下文的保存方法,否则操作不会执行。

4.删除数据

删除数据可以直接调用管理对象上下文的deleteObject方法,删除完保存上下文即可。注意,删除数据前必须先查询到对应对象。

5.修改数据

修改数据首先也是取出对应的实体对象,然后通过修改对象的属性,最后保存上下文。

5、OC中有哪些数据存储方式,各有什么区别? OC中有四种数据存储方式: 1).NSUserDefaults,用于存储配置信息 2).SQLite,用于存储查询需求较多的数据 3).CoreData,用于规划应用中的对象

4).使用基本对象类型定制的个性化缓存方案. NSUserDefaults:对象中储存了系统中用户的配置信息,开发者可以通过这个实例对象对这些已有的信息进行修改,也可以按照自己的需求创建新的配置项。SQLite擅长处理的数据类型其实与NSUserDefaults差不多,也是基础类型的小数据,只是从组织形式上不同。开发者可以以关系型数据库的方式组织数据,使用SQL DML来管理数据。一般来说应用中的格式化的文本类数据可以存放在数据库中,尤其是类似聊天记录、Timeline等这些具有条件查询和排序需求的数据。 CoreData是一个管理方案,它的持久化可以通过SQLite、XML或二进制文件储存。它可以把整个应用中的对象建模并进行自动化的管理。从归档文件还原模型时CoreData并不是一次性把整个模型中的所有数据都载入内存,而是根据运行时状态,把被调用到的对象实例载入内存。框架会自动控制这个过程,从而达到控制内存消耗,避免浪费。无论从设计原理还是使用方法上看,CoreData都比较复杂。因此,如果仅仅是考虑缓存数据这个需求,CoreData绝对不是一个优选方案。CoreData的使用场景在于:整个应用使用CoreData规划,把应用内的数据通过CoreData建模,完全基于CoreData架构应用。使用基本对象类型定制的个性化缓存方案:从需求出发分析缓存数据有哪些要求:按Key查找,快速读取,写入不影响正常操作,不浪费内存,支持归档。这些都是基本需求,那么再进一步或许还需要固定缓存项数量,支持队列缓存,缓存过期等。

数据存储这一块,面试常问, 你常用哪一种数据存储?什么是序列化?sqlite是直接用它还是用封装了它的第三方库?尤其是会问sqlite和core data的区别?

5、IOS平台怎么做数据的持久化?coredata和sqlite有无必然联系?coredata是一个关系型数据库吗?

iOS中可以有四种持久化数据的方式: 属性列表、对象归档、SQLite3和Core Data coredata可以使你以图形界面的方式快速的定义app的数据模型,同时在你的代码中容易获取到它。coredata提供了基础结构去处理常用的功能,例如保存,恢复,撤销和重做,允许你在app中继续创建新的任务。在使用coredata的时候,你不用安装额外的数据库系统,因为coredata使用内置的sqlite数据库。coredata将你app的模型层放入到一组定义在内存中的数据对象。coredata会追踪这些对象的改变,同时可以根据需要做相应的改变,例如用户执行撤销命令。当coredata在对你app数据的改变进行保存的时候,core data会把这些数据归档,并永久性保存。mac os x中sqlite库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。可以在多个平台使用,sqlite是一个轻量级的嵌入式sql数据库编程。与coredata框架不同的是,sqlite是使用程序式的,sql的主要的API来直接操作数据表。Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS)。虽然Core Dta支持SQLite作为一种存储类型, 但它不能使用任意的SQLite数据库。Core Data在使用的过程种自己创建这个数据库。Core Data支持对

一、对多的关系。

6、如果后期需要增加数据库中的字段怎么实现,如果不使用CoreData呢?

编写SQL语句来操作原来表中的字段 增加表字段

ALTER TABLE 表名 ADD COLUMN 字段名字段类型; • 删除表字段

ALTER TABLE 表名 DROP COLUMN 字段名;

.

修改表字段

ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名;

7、SQLite数据存储是怎么用?

添加SQLite动态库:

导入主头文件:#import 利用C语言函数创建打开数据库,编写SQL语句

8、简单描述下客户端的缓存机制?

1>缓存可以分为:内存数据缓存、数据库缓存、文件缓存 2>每次想获取数据的时候 3>先检测内存中有无缓存

4>再检测本地有无缓存(数据库文件) 5>最终发送网络请求

6>将服务器返回的网络数据进行缓存(内存、数据库、文件), 以便下次读取

9、你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在线程中创建或者传递?你是用什么样的策略来实现的?

1>CoreData是对SQLite数据库的封装

2>CoreData中的NSManagedObjectContext在多线程中不安全

3>如果想要多线程访问CoreData的话,最好的方法是一个线程一个NSManagedObjectContext 4>每个NSManagedObjectContext对象实例都可以使用同一个NSPersistentStoreCoordinator实例,这是因为NSManagedObjectContext会在便用NSPersistentStoreCoordinator前上锁

10、core data数据迁移

博客地址: http://blog.csdn.net/jasonblog/article/details/17842535

11、FMDB的使用和对多张表的处理

博客地址: http://blog.csdn.net/wscqqlucy/article/details/8464398

12、说说数据库的左连接和右连接的区别

数据库左连接和右连接的区别:主表不一样通过左连接和右连接,最小条数为3(记录条数较小的记录数),最大条数为12(3×4)技术博客的地址 : http:///database/201407/317367.html

第二篇:黑马程序员:IOS面试宝典之c语言

C语言语法

1. 局部变量能否和全局变量重名?

答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同 名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

2. 如何引用一个已经定义过的全局变量?

答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期 间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

3. 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答:可以,在不同的C文件中以static形式来声明同名全局变量。

可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.

4. 关键字volatile有什么含意?并举出三个不同的例子?

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

1) 并行设备的硬件寄存器(如:状态寄存器)

2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3) 多线程应用中被几个任务共享的变量

5. static 关键字的作用是什么?

(1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,

因此其值在下次调用时仍维持上次的值;

(2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;

(3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明

它的模块内;

(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;

(5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。

6. 堆和栈的区别是什么?

管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。

申请大小:栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统 预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示 overflow。因此,能从栈获得的空间较小。堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地 址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个 问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出 分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由 alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。

分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的 效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的

7. static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

综上所述: static全局变量与普通的全局变量有什么区别:

static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:

static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:

static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

8. 关键字const的作用分别是什么?

const int a; int const a; const int *a; int const *a; int * const a; int const * const a; 1> 前两个的作用是一样:a 是一个常整型数

2> 第

三、四个意味着 a 是一个指向常整型数的指针(整型数是不可修改的,但指针可以) 3> 第五个的意思:a 是一个指向整型数的常指针(指针指向的整型数是可以修改的,但指针是不可修改的) 4> 最后一个意味着:a 是一个指向常整型数的常指针(指针指向的整型数是不可修改的,同时指针也是不可修改的) 9. struct与union的区别是什么?

设有以下说明和定义:

typedef union

{ long i; int k[5]; char c; } DATE;

struct data { int cat; DATE cow; double dog; } too;

DATE max;

则语句 printf("%d",sizeof(struct data)+sizeof(max));的执行结果是:___52____ 考点:区别struct与union.(一般假定在32位机器上)

答:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20. data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32. 所以结果是 20 + 32 = 52. 当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20 10. 关于指针的理解

1.请写出下题输出结果:

1. Main(){ 2. Int a[5] = {1,2,3,4,5};

3. Int *ptr = (int *)(&a+1); 4. Printf(“%d,%d”,*(a+1),*(ptr – 1)); 5. } 答:2,5

*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2.5,&a+1不是首地址+1,系统会认为加一个a数组的偏 移,是偏移了一个数组的大小(本例是5个int,int *ptr=(int *)(&a+1);则ptr实际 是&(a[5]),也就是a+5原因如下:

&a是数组指针,其类型为 int (*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。a是长度为5的int数组指针,所以要加 5*sizeof(int)所以ptr实际是a[5],但是prt与(&a+1)类型是不一样的(这点很重要),所以prt-1只会减去sizeof(int*),a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]. 2.写出下列代码的输出内容

#include

int inc(int a)

{ return(++a); }

int multi(int*a,int*b,int*c)

{

return(*c=*a**b); }

typedef int(FUNC1)(int in);

typedef int(FUNC2) (int*,int*,int*);

void show(FUNC2 fun,int arg1, int*arg2)

{

FUNC1 p=&inc;

int temp =p(arg1);

fun(&temp,&arg1, arg2);

printf("%dn",*arg2);

}

main()

{

int a;

//局部变量a为0;

show(multi,10,&a);

return 0;

}

答:110

3.以下为Windows NT下的32位C++程序,请计算sizeof的值void Func ( char str[100] ) {

sizeof( str ) = ? } void *p = malloc( 100 ); sizeof ( p ) = ? 答案:这题 很常见了,Func ( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等 操作,可以被修改。Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof ( p ) 都为4。

第三篇:黑马程序员:最详细的百度知道推广方案实施技巧

百度知道推广,大家都十分清楚,也被很多高手熟练运用,但对于很多新手来说,没有长期坚持,就不会看到效果。有时候我们不需要很多高深的技巧,只需要简单的事情重复做。好了,开始今天的正题。

百度知道:百度知道问答有两个直接的好处,一是能够带来直接的流量,如果你回答的问题能够带上链接,那么每天顺着链接就会有不少的用户直接访问你的网站。二是高权重,如果你的问题带有网站的关键词,在用户搜索时就会搜索到你的百度问答,这样网站曝光度就会得到提升。但很多站长操作的时候也碰到各种问题,比如域名被屏蔽、来源流量少、审核通不过等。避免域名被屏蔽最好的方法就是换账号操作;来源流量少解决的最好办法就是采用自问自答,并且尽量带上不同网址,这些网址最好能够直接或者间接能访问到你的网站;而审核通不过的话需要多从专业上入手,回答时要足够专业,这样通过的几率就会大大增加。 百度知道推广的做法

注册账号50个,把账号分为10组

A1 A 2 A3 A4 A5 B1 B2 B3 B 4 B5 第1天:A1提问 第2天:A2提问

第3天:B1回答A1的问题,A1采纳最佳答案,对最佳答案评价;A3提问,顶A1问题 第4天:B2回答A2的问题,A2采纳最佳答案,对最佳答案评价;A4提问,顶A2问题 第5天:B3回答A3的问题,A3采纳最佳答案,对最佳答案评价;A5提问,顶A3问题 第6天:B4回答A4的问题,A4采纳最佳答案,对最佳答案评价;顶A4问题 第7天:B5回答A5的问题,A5采纳最佳答案,对最佳答案评价;顶A5问题

依次类推,7天一个循环,10组账号采用排序算法组合;同时,需要用excel记录每日百度账号所发布的问题的分类。 百度知道推广排名影响因素

百度知道的排名是包括两个部分:一个是在百度知道中搜索关键词出现的结果排名,另一个就是在百度自然搜索中出现的来自百度知道的排名。

首先我们来看一下我们可以控制的所有因素,然后再分析一下他们那些对于排名有影响力:

1、好评的数量:这点的影响力是最大的,也是最重要的一个环节,通过观察发现在一些热门搜素词的搜索结果中排名靠前的毫无例外的都有十个以上的好评,当然我们做的时候可以通过更改IP更改账号的方式获得这种好评,但是也要你的回答说得过去才行。

2、提问者和回答者的等级:这个对于百度知道排名的影响其实很小,因为通过观察我们可以看到这个很多匿名、一级用户的提问、回答也可以出现在百度知道搜索结果的前面。相对而言这降低了我们的门槛。

3、标题的写法:这一点对于排名的影响也是很大的,这基本相当于网页中的title,和用户的搜索词越接近的词越会排在前面,这个不要求多,但是一定要精确,要是能和用户的提问一字不差的话那么你的问答就很有可能排到前面了。

4、回答者的数量:这一点对于百度知道的排名也是影响甚微的,因为我们看到即使只有一个回答者,它的排名也可以是第一位的。但是我们建议回答数量在三个以上,而且最后一个回答的最后一句话最好包含我们的关键词。

5、关键词的密度:这个影响看上去也不是很大但是不能说没有,可以适当的提高自己的关键词密度,但不可刻意的去堆砌。

此外关于参考网址、携带的外链、内链信息,已经对最佳答案的评价等等信息对于百度知道的排名相对影响很小可以忽略不计的。 百度知道推广注意事项

1、多个账号轮换使用不能只是提问或者只是回答。

2、为了防止别有用心的人跟踪你的帐号,回答问题最好还是隐藏名称。

3、自问自答绝对不能是同一ip,否则直接是封号。

4、自问自答要保证一定的时间间隔,最好几个小时或者几天后在回答,有几个垫底的之后,你再将自己的答案采为最佳。

5、一个账号,在一天内最好不要超过回答10个问题,在同一时段最好不要回答超过3个问题。

6、回答问题时要注意时间。不要每天集中一段时间回答问题,要把回答分散开。

7、在百度知道上做链接一天之内最多2个。

8、加链接不要直接使用首页链接。

9、要想专注于百度知道的推广,就一定要多换ip。

10、一般一个账号一天是养不成的,需要几天或者更多的时间。

11、加入一些百度知道互助QQ群,然后和别人轮流提问回答,互相帮助互相支持!

12、尽量做到,一个问题,有3-10条回答,其中60%的答案可以是我们网站的托。

13、问题、问题补充和答案中都包含该关键词,控制该关键词密度为3%—8%范围内。

14、最佳答案的前面几句要紧密围绕该问题,这个很重要。可能会被加为结果下的描述。

15、同一个IP不要注册太多帐号,会被封的,注册完了后不管你用不用都要记得每天登陆一下。

16、标题要利用人性的两大弱点:好奇心和贪婪心。

17、在百度知道答案留链接一定要把链接放到参考资料中。

18,如果使用的是ADSL拔号上网,就把宽带断开再重新链接一下就可以说换一个IP了;如果是路由器,就把它关掉,接着再开启;如果觉得麻烦,网上也有很多做代理服务器及换IP的软件可以下载。

19、待解决的问题,在百度中搜索不到。

第四篇:黑马程序员自荐信

自荐信_XXX_151********

姓名:XXX

电话:151********

邮箱:********n2009@126.com

尊敬的老师:

你好,我叫XXX,今年24岁,就读于XXXX,XXXX专业,将于2012年毕业。性格稍内向,善于交流,看待事情能够理性认识,善于思考,有团队合作精神。在学校的这三年多的时间里,由于专业需要,对计算机接触较多。在开设的课程中学过C语言、C#、java等编程语言,对编程语言有一定的了解。在接触java程序语言和J2ME手机游戏开发的学习中,对java产生了强烈的兴趣,并对java学习有了一定的基础。 通过“黑马程序员训练营”的官网,我了解到了javaee+3G课程体系所包含的知识面广,是经过对java前景分析和现在就业所需技术要求而制定的,对我们这些即将参加就业、想参加java方面工作的人来说是最好的强心剂。课程安排科学合理,有助于学员深化对java的学习,使学员掌握到真正前沿的技术。我深信,“黑马程序员训练营”的讲师是java培训和开发方面最棒的,这也是我钟情于“黑马程序训练营”的原因之一。由于家里生活拮据,不想让父母操心、给家里增加经济负担,是“黑马程序员”给了我一个机会、给了我一份保证。

作为一名理科生,我有着很强的求知欲,勤奋,有上进心,对于坚信的事情能够坚持到底。在平时学习过程中,善于独立思考,遇到问题会尝试各种方法去解决(网络、老师、同学都是我的获得知识的途径)。平时喜欢看一些和自己专业的书籍,乐于了解一些最前沿的科技和未来的发展趋势。注重的基础知识的同时,喜欢探索新知识,在收获知识的同时也收获着乐趣。学习是一辈子的事情,也是一件乐事,就算将来学校的生活结束了,学习也永远不会落下。

我非常期待能成为“黑马程序员训练营”的一员,如果这个愿望能实现,我将以最大的热情投入到“黑马程序员训练营”的学习中去,用自己的努力去实现的自身价值,用自己的成绩回报“黑马程序员训练营”。我坚定工作后的第一件事就是努力工作,用工资偿还培训期间的费用,绝不辜负“黑马程序员训练营”对我的信任和老师的培养!请给我一份信任,我将以自己的自己的行动去回报。

择是我的期望,给我一次机会还你一份惊喜。

非常感激你能在百忙之中翻阅我的自荐信。祝你工作顺利,事业蒸蒸日上!

此致

敬礼

自荐人:XXX

2012年02月17号

第五篇:黑马程序员自荐信-李好运

自荐信_李好运_18612327867

姓名:李好运

电话:18612327867

邮箱:lihaoyun416@126.com

尊敬的老师:

你好,我叫李好运,今年23岁,河南省原阳县人。2013年毕业于河南工业职业技术学院(原中原机械工业学校,是一个军工学校),电子信息工程系,应用电子技术专业,现工作于北京的一家通讯公司。性格偏外,乐于交流,生活中与同学和睦相处,工作中与同事友好共事,善于思考,动手能力很强,有团队合作,吃苦耐劳精神。在学校的这三年多的时间里,由于专业需要,对计算机也略有接触。在开设的C语言,单片机程序设计课程中学过C语言,并对C语言进行过实际程序的验证,对编程语言有一定的了解。在工作中,我在公司负责的是一款JAVA语言编写的网管软件测试工作,所以需要有一定的JAVA编程基础。在java编程语言学习中,对java产生了强烈的兴趣,并对java学习有了一定的基础。

通过“黑马程序员训练营”的官网,我了解到了JavaEE+物联云计算课程体系所包含的知识面广(三大框架大数据等知识,这些都是现在必要掌握的知识),是经过对java前景分析和现在就业以及以后几年内所需技术要求而制定的,对我们这些不满足于现状需求进步、想参加java方面工作的人来说是最好的强心剂。课程安排科学合理,有助于学员深化对java的学习,使学员掌握到真正前沿的技术,良好的学习气氛,更有利于我们课下的交流与学习。我深信,“黑马程序员训练营”的讲师是java培训和开发方面最棒的,这也是我一直在追寻“黑马程序训练营”的原因之一。由于家里生活拮据,父母年迈,不想再让父母为我的事业而操心,非常感谢黑马提供这样一个平台,给了我一个重新选择的机会。

作为理科生毕业的我,有坚韧的毅力,对于自己想做的事就一定要做到,有上进心,每天都要学到新的知识,这样才能过得充实,求知,创新,才不会被淘汰。在平时工作与学习过程中,善于独立思考,有自己的见解与逻辑思维,同时和朋友同事做好沟通与交流。遇到新的问题,通过网络或者朋友同事,并结合自己的见解进行解决。在生活之余,喜欢看一些JAVA的基础知识的书籍,以及毕老师的学习视频。注重基础知识的同时,也喜欢和java群中的一些好友探讨新的问题,例如各种语言在运算时的优先级问题,会出现不同的运算结果等,在收获知识的同时也收获着乐趣。学习如逆水行舟,不进则退,是一件不容忽视的事情,同时也伴随着获得新知的快乐,每天学到新东西,解决一个个小问题,充充实实的过好每一天。 我非常期待能成为“黑马程序员训练营”的一分子,用我的万分努力换你的一份选择,我将以最好的状态投入到“黑马程序员训练营”的学习中去,用自己的成绩回报“黑马程序员训练营”。我是一个勤俭节约懂得感恩的人,用自己的智慧结晶来偿还培训期间的费用,绝不辜负“黑马程序员训练营”对我的信任和老师的培养!

非常感激您能在百忙之中翻阅我的自荐信。祝您工作顺利,事业蒸蒸日上!

此致

敬礼

自荐人:李好运

2014年7月6号

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:洪涝灾害产生的原因下一篇:互联网新闻信息服务