学习参考

 

 课程:

语言
认证类型
课程
练习题(在每单个课程或课程组合内,5题任选3题完成)
学习参考
Linux Shell GoodCoder

01.Linux 介绍(简介、发行版本、Linux VS Window)

02.Linux 基础(安装、系统启动过程、系统目录结构、远程登录)

03.Linux 常用命令(cd、pwd、ls、who、cat、mkdir、rmdir、chmod、chown、chgrp、touch、cp、mv、rm、find、grep、more、less、head、tail、cut、at、crontab、sleep、mesg、wall、write、kill、pstree、expr、locate、split、login、logout、exit、man、info、alias、unalias、halt、shutdown、reboot、clear、sortdf、du、fdisk、free、top、vmstat、sar、iostat、netstat、ps

04.Linux vi/vim 操作(编辑、退出、保存、删除、跳到指定行、行首、行尾等)

05.Shell 基础 (shell环境、如何运行、shell的变量、参数传递、I/O重定向等)

06.Shell 编程的基本元素(变量、函数、条件控制和流程控制、循环控制等)

07.Shell正则表达式(正则基础)

08.Shell基本文本处理(排序、去重、统计文本行数 字数 字符数、打印和格式化输出、字段处理、文本替换等)

09.Shell sed流编辑

10.Shell awk文本处理

11.进程(进程、线程、调度系统任务等)

01-02:

-Q1:请简述linux系统加载过程。

-Q2:什么是swap分区?安装linux操作系统的时候,如何设置swap分区大小。

-Q3:请问题下面目录主要存放什么数据。 /etc,/etc/initd/,/boot,/usr/bin,/bin,/usr/sbin,/sbin,/dev,/var/ log

-Q4:在系统中创建2个用户,test01、test02,创建1个用户组group01,且test01、test02对于group01有读写权限,其他之外的任何用户对group01都不可读。请列出实现该需求的相关完整指令。

-Q5:找出/etc下面,文件容量大于50KB且文件所有者不是root的文件名,且将权限完整的列出。(ls -l)

 

03:

-Q1:请使用一条指令,一次性创建多层目录,如:/home/map/test/a/b/c 。

-Q2:请查找odp_cater目录下所有.log文件中存在ERROR字段的log文件,输出具体log文件名称。

-Q3:请统计odp_cater模块中access log访问量最多的1个IP。

-Q4:按进程内存大小,从大到小排列。

-Q5:根据端口(如:8086)列出进程名称。

 

04:

-Q1:请问vi/vim 有哪几种模式?不同模式之间如何切换。

-Q2:请问vi/vim移动光标的方法指令(如:上下移一页,第一行和最后一行)。

-Q3:请问vi/vim查找和替换的方法指令(如:向上向下查找字符串为"ERROR"的字符串,从第一行到最后一行查找ERROR的字符串且将其替换为error)。

-Q4:请问vi/vim删除、复制、粘贴的方法指令(如:删除一整行,复制光标所在一行,将已复制的内容粘贴到光标的上一行等)。

 

05-06:

-Q1:创建一个函数,能接受两个参数:

1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个55的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回56给调用脚本;

-Q2:写一个脚本,实现判断10.8.99.0/24网络里,当前在线的IP有哪些,能ping通则认为在线。

-Q3:批量创建5个系统用户test01-test05并设置密码(密码为test后面跟3个随机字符),用户名和密码按行写入userinfo文件。

-Q4:在/home/map目录下通过随机小写5个字母加固定字符串test批量创建10个html文件,名称列如:abcdetest.html (使用for循环)。

-Q5:开发shell脚本分别实现以脚本传参以及read读入的方式比较2个整数大小。以屏幕输出的方式提醒用户比较结果。注意:一共是开发2个脚本。当用脚本传参以及read读入的方式需要对变量是否为数字、并且传参个数做判断。

 

07-11:

-Q1:用shell处理以下内容

1、按单词出现频率降序排序!
2、按字母出现频率降序排序!
the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation

-Q2:用shell验证邮箱是否合法(输入邮箱地址xx,判断合法则打印输出You email is:xx;不合法,则输出 validation is wroing)

-Q3:在每周日凌晨零点零分定期备份/home/map/odp_cater/log/php-error.log 到 /home/map/test 目录下。

-Q4:监控CPU使用,输出日期时间,CPU load,CPU idle。

-Q5:写一个shell脚本统计日志中的词表比例top5,即接口地址出现的次数。

         
Python GoodCoder

01.Python简介(介绍、特点、环境、运行等)

02.Python基础(如:基础数据结构及其操作、逻辑判断、循环、函数、类、模块、语句和语法、变量赋值等)

03.Python对象(如:标准类型、内建类型、内部类型、标准类型操作、标准类型内建函数等)

04.数字(如:整型、操作符、内建函数与工厂函数等)

05.序列:字符串、列表、元组

06.映射和集合类型(如:字典、集合)

07.条件和循环(如:if、else、elif、while、for、break、continue、pass、迭代器等)

08.文件和输入输出(如:文件内建函数等)

09.错误和异常(如:检测和处理异常、上下文管理、异常和sys模块等)

10.函数和函数式编程(如:函数的创建和调用、传递等)

11.模块(如:模块、模块导入等)

01:

-Q1:请手动安装配置Python环境。

-Q2:请列出系统环境中Python执行程序的安装位置和标准库模块的安装位置。

-Q3:请使用print语句编写脚本,屏幕输出名字、爱好等。

-Q4:请简述运行Python的几种方法。

-Q5:执行 Python 程序时,自动生成的  .pyc  文件的作用是什么?

 

02-04:

-Q1:Python的参数传递是值传递还是引用传递,请分别写出参数传递和引用传递的代码Demo?

-Q2:请分别阐述 单引号,双引号,三引号的区别和应用场景?

-Q3:Python如何进行类型转换?请编写代码Demo说明。

-Q4:内建函数 type() 做什么用?type()返回对象是什么?请编写代码Demo说明。

-Q5:字符串格式化:%和format的区别?请编写代码Demo说明。

 

05-07:

-Q1:请实现字典反转,如:d={'a':5,b':6,'c':7}

-Q2:请写出一段Python代码实现删除一个list里面的重复元素。

-Q3:数组和元组之间的区别是什么?请实现代码Demo,分别实现数组和元组之间的相互转换。

-Q4:请判断一个字符串是否为回文字符串?如:abcdcba

-Q5:请去重字符串?如:abddaddfd

 

08:

-Q1:有UTF-8编码的文件a.txt,文件存放在/opt目录,写一段程序逐行读入文本文件,且在屏幕(gbk编码)打印出来。

-Q2:如何使用Python新建、删除一个文件?

-Q3:Python如何Copy文件?请用代码Demo说明。

-Q4:请使用Python实现linux tail -f 功能(ps:考虑文件的大小情况)。

-Q5:写一个函数,输入一个字符串,返回倒序排列的结果。

 

09 - 11:

-Q1:请介绍Python的异常处理机制,且用代码Demo说明。

-Q2:_new_和_init_的区别是什么?请编写代码Demo说明。

-Q3:请使用Python函数实现单例模式。

-Q4:Python的模块和包是什么?

-Q5:请说明os sys模块不同,并列举常用的模块方法?

  CoderMaster

12.面向对象编程

13.执行环境(可调用对象、执行其他python和非python程序等)

14.正则表达式

15.多线程编程

16.数据库编程

可选(网络编程、网络客户端编程、Web编程)

-Q1:(ps:Python CoderMaster,仅完成此题即可。)

在调研过程中,经常需要对一些网站进行定向抓取。由于python包含各种强大的库,使用python做定向抓取比较简单。请使用python开发一个迷你定向抓取器mini_spider.py,实现对种子链接的抓取,并把URL长相符合特定pattern的网页保存到磁盘上。

 

程序运行:
python mini_spider.py -c spider.conf

 

配置文件spider.conf:
[spider]
url_list_file: ./urls ; 种子文件路径
output_directory: ./output ; 抓取结果存储目录
max_depth: 1 ; 最大抓取深度(种子为0级)
crawl_interval: 1 ; 抓取间隔. 单位: 秒
crawl_timeout: 1 ; 抓取超时. 单位: 秒
target_url: .*.(htm|html)$ ; 需要存储的目标网页URL pattern(正则表达式)
thread_count: 8 ; 抓取线程数

 

种子文件每行一条链接,例如:
http://www.baidu.com
http://www.sina.com.cn

 

要求和注意事项:

1. 需要支持命令行参数处理。具体包含: -h(帮助)、-v(版本)、-c(配置文件)
2. 单个网页抓取或解析失败,不能导致整个程序退出。需要在日志中记录下错误原因并继续。
3. 当程序完成所有抓取任务后,必须优雅退出。
4. 从HTML提取链接时需要处理相对路径和绝对路径。
5. 需要能够处理不同字符编码的网页(例如utf-8或gbk)。
6. 网页存储时每个网页单独存为一个文件,以URL为文件名。注意对URL中的特殊字符,需要做转义。
7. 要求支持多线程并行抓取。
8. 代码严格遵守百度python编码规范。
9. 代码的可读性和可维护性好。注意模块、类、函数的设计和划分。
10. 完成相应的单元测试和使用demo。你的demo必须可运行,单元测试有效而且通过。

 

提示(下面的python库可能对你完成测试题有帮助):


o re(正则表达式)
o 参考: http://docs.python.org/2/library/re.html
o 参考: http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
o 参考: http://blog.csdn.net/jgood/article/details/4277902

o gevent/threading(多线程)
o 参考: http://docs.python.org/2/library/threading.html
o 参考: http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html

o docopt/getopt/argparse(命令行参数处理)
o 参考: https://github.com/docopt/docopt
o 参考: http://docs.python.org/2/library/getopt.html
o 参考: http://andylin02.iteye.com/blog/845355
o 参考: http://docs.python.org/2/howto/argparse.html
o 参考: http://www.cnblogs.com/jianboqi/archive/2013/01/10/2854726.html

o ConfigParser(配置文件读取)
o 参考: http://docs.python.org/2/library/configparser.html
o 参考: http://blog.chinaunix.net/uid-25890465-id-3312861.html

o urllib/urllib2/httplib(网页下载)
o 参考: http://docs.python.org/2/library/urllib2.html
o 参考: http://blog.csdn.net/wklken/article/details/7364328
o 参考: http://www.nowamagic.net/academy/detail/1302872

o pyquery/beautifulsoup4/HTMLParser/SGMLParser(HTML解析)
o 参考: http://docs.python.org/2/library/htmlparser.html
o 参考: http://cloudaice.com/yong-pythonde-htmlparserfen-xi-htmlye-mian/
o 参考: http://docs.python.org/2/library/sgmllib.html
o 参考: http://pako.iteye.com/blog/592009

o urlparse(URL解析处理)
o 参考: http://docs.python.org/2/library/urlparse.html
o 参考: http://blog.sina.com.cn/s/blog_5ff7f94f0100qr3c.html

o logging(日志处理)
o 参考: http://docs.python.org/2/library/logging.html
o 参考: http://kenby.iteye.com/blog/1162698
o 参考: http://my.oschina.net/leejun2005/blog/126713

         
Php GoodCoder

01. PHP简介&基础语法(特点简介、交互式命令行、基础语法等)

02.PHP语法基础(如:方法、== 与 ===、if/else/foreach/switch等、const与static等)

03. 面向对象的PHP(类、接口、Trait、抽象类、抽象方法、构造析构、类的方法、访问权限public/private等)

04. 字符串操作(PHP强大、常用的字符串函数们、编解码等)

05. 数组操作(PHP强大、常用、万能的数组操作函数们)

06. 文件操作(文件打开/读取,创建/写入,上传等)

07. Web相关函数学习(Cookie操作、URL解析、请求参数编解码、Json等)

08. 异常处理、魔术方法、自动加载等

01-02:

-Q1:请解释 == 与 ===的区别,且编写代码Demo说明。

-Q2:echo(),print(),print_r()的区别,且编写代码Demo说明。

-Q3:请写出如下程序的输出结果。

<?php
$test = 'aaaaaa';
$abc = &$test;
unset($test);
echo $abc;
?>

-Q4:请写出如下程序的输出结果。

<?php
$count = 5;
function get_count(){
static $count = 0;
return $count++;
}
echo $count;
++$count;
echo get_count();
echo get_count();
?>

-Q5:isset($val), empty($val),boolval($val), intval($val) $val == false , $val === false, $val == null 的区别,且编写代码Demo说明。

 

03-04:

-Q1:请写一个函数,尽可能高效的,从一个标准 url里取出文件的扩展名。如:http://www.baidu.com/abc/de/fg.php?id=1,需要取出php或.php。

-Q2:请打印斐波那契数列10个, 1,1,2,3,5……(递归、循环)。

-Q3:假设订单号生成规则:10位时间戳+4位毫秒+2位随机数。已知函数isExist($orderId)可以判断订单号是否已经存在,重复可重新生成。写一个生成订单号的函数createOrderId()。

-Q4:PHP实现类继承:要求有基类普通订单,包含属性订单类型(orderType)、方法打印订单信息(打印类型-单号)、Q3所述方法,子类有外卖订单,商超订单,质享订单,并覆盖基类属性、方法。要求正确使用abstract、final。

-Q5:请自己写一个函数,实现字符串的反转。

 

05-06:

-Q1:将下面的数组用一行拼装成一个字符串 i am qa ! day day up!

<?php 
$arr = array( 
    'I', 'AM', 'QA!', 'DAY', 'DAY', 'UP!' 
); 

-Q2:请写出以下程序的输出结果。

<?php
function get_arr_ref(&$arr){ unset($arr[0]); }
function get_arr($arr){ unset($arr[0]); }
$arr1 = array(1, 2); $arr2 = array(1, 2);
get_arr_ref($arr1); get_arr($arr2);
echo count($arr1); echo count($arr2); ?>

-Q3:请写一个函数遍历目录下的所有文件和文件夹。

-Q4:求数组中最大数的下标。

-Q5:请写一个函数,将一个长度超过10 的数组最后5项直接截取,不改变顺序变为前5项,如{1,2,3,4,5,6,7,8,9,10}变为{6,7,8,9,10,1,2,3,4,5}。

 

07-08:

-Q1:请尽可能多的列举魔术方法,且编写代码说明其用法。

-Q2:PHP加载文件有哪几种方式?请分别列举,且编写代码Demo说明。

-Q3:请编写函数,分别模拟实现Http请求(POST请求,GET请求)。

-Q4:cookie于session的区别?

-Q5:php自动加载有那几种方法, __autoload()自动加载的缺陷?

PHP官网中文手册:http://php.net/manual/zh/ (better)
W3C学习网站PHP教学:http://www.w3school.com.cn/php/

《PHP 之道》: http://laravel-china.github.io/php-the-right-way/

 

《深入PHP:面向对象、模式与实践》 https://book.douban.com/subject/6559267/

 PDF

  CoderMaster

11. PHP与基础组件(PHP 与Mysql、Redis、Nginx等)

12. PHP编码安全

13. PHP In Waimai学习(Wodp框架、NMQ、PHPlib常用函数等)

14. 包管理、PHP框架、第三方库学习(composer,框架Laraval/Yaf等, 库phpunit,monolog等)

15. SAPI、Zend虚拟机、内存模型等学习

16. PHP扩展开发

 

11-16:(以下2题任选1题完成)

-Q1:PHP新人入职一周练习题 (ps:参考完成其中1-4题)

-Q2:在我们的开发任务中,最常见的一项工作就是对用户请求的参数,进行各种合法性校验,请设计并实现一个通用的请求参数合法性校验的类库(一个或者几个class组成), 提供一个类似如下的接口: 1. Validator::validate($schema, $value, &$err_msg) • schema : 对数据校验规则的描述,具体格式请自行设计,需要能够清晰描述下面提到的

各种校验规则 • value : 需要校验合法性的数据 • err_msg: 如果检验不合法,需要返回详细信息,告诉用户为何不合法 • 返回值:如果检验合法,则返回true,如果不合法则返回false

具体需要支持的校验规则,包括但不限于如下: • 校验数据的类型是否合法,比如要求是bool, int, float, string, array, object类型中的某一个 • 校验数据的值的范围是否合法,比如某个值要求 > 0且<100 • 校验数据的值是否在某个列表内,比如某个数据只能取 ‘red’, ‘blue’, ‘green’这三个值之一 • 对于string类型的值,校验string的长度是否在某个区间,比如string长度必须大于0且小于20个字符 • 对于string类型的值,校验string是否符合某个正则表达式,比如必须匹配’\w+’这样的正则 • 对于array类型的值,可以递归地校验其中的每个元素,满足某个校验规则,比如array中的元素都必须是int且大于0 • 对于array类型的值,可以递归地校验其中的某个特定元素,满足某个校验规则,比如$arr[‘user_id’]必须是int且大于0 • 对于array中的元素,支持可选字段的校验,比如$arr[‘enable’]字段如果存在,则必须为bool类型,如果不存在则不需要校验。 • 支持用户自定义扩展校验规则,比如用户自己实现一个函数对某个字段进行校验

其它要求: • 代码严格遵守百度编码规范 • 代码的可读性和可维护性好,注释清晰 • 代码容错性好,无论输入什么值,都不会出现PHP Fatal/Warning/Notice报错 • 完成相应的单元测试,单元测试覆盖率高,能够有效运行而且通过,单元测试必须使用PHPUnit • 完成相应的使用demo, demo可运行,demo也要符合编码规范

进阶必读:PHP 之道 http://laravel-china.github.io/php-the-right-way/

 

进阶选读:《Modern PHP》https://book.douban.com/subject/26635862/

 PDF

 

         
Java GoodCoder

01.Java类与对象的基本概念,字段、方法、参数、返回值的理解

02.Java常用操作符使用(算术、关系、逻辑、按位、移位、三元操作符),优先级的判断

03.常用控制流程语句,if-else、switch-case、for、while、break、continue等的使用

04.对象的初始化与清理流程,构造函数的含义,成员初始化与构造器初始化的顺序,finalize的用途

05.Java访问权限控制,包括import的使用与public、private、protected的区分

06.Java接口与实现、抽象类与抽象方法的使用和区别

07.多态与继承的深入理解,组合与继承的区别

08.final类、final方法、final数据的作用与使用场景

09.Java内部类、匿名内部类与this的理解

10.Java异常处理流程,try-catch与finally的含义与使用,常见的Exception类型

11.字符串的使用,String、StringBuffer、StringBuilder的区别

12.Java容器与集合类的理解与使用,List、Set、Map、Stack、Queue等,迭代器的使用

13.常见数据结构的原理学习(可深入源码),HashMap、ArrayList、LinkedList、HashSet等

14.枚举enum的定义与使用,以及与final常量的场景区别

15.Java I/O系统,包括File类的创建与各类操作,输入/输出,InputStream/OutputStream,及相关子类

16.常用设计模式的实现,包括单例模式、工厂模式、观察者模式、builder模式等

01-03

-Q1:下面的代码执行后,i和j分别是多少?int i = 0;int j = i++;int k = --i。

-Q2:Java中&与&&的区别是什么?

-Q3:Java中break和continue的用法及区别?

-Q4:JDK和JRE的区别是什么?

-Q5:Java支持的数据类型有哪些?什么是自动拆装箱?并请编写代码Demo说明。

 

04-05

-Q1:静态内部类与非静态内部类的区别是什么?

-Q2:创建啮齿动物(Rodent):老鼠(Mouse)、鼹鼠(Gerbil)、大颊鼠(Hamster)这样一个继承结构,在基类中提供通用的方法,并在子类中根据特定的Rodent类型覆盖这些方法,以便执行不同的行为,创建一个Rodent数组并填充不同的Rodent类型,执行基类的方法,观察结果。

-Q3:编写一个程序,验证(静态变量、静态初始化块、变量、初始化块、构造器)的初始化顺序。

-Q4:请写出作用域public、private、protected及其区别?并请编写代码Demo说明。

-Q5:请写出以下程序的输出结果?(ps:结合Java对象初始化执行优先级)

public class InitializeDemo {
private static int k = 1;
private static InitializeDemo t1 = new InitializeDemo("t1");
private static InitializeDemo t2 = new InitializeDemo("t2");
private static int i = print("i");
private static int n = 99;
static {
print("静态块");
}
private int j = print("j"); {
print("构造块");
}
public InitializeDemo(String str) {
System.out.println((k++) + ":" + str + " i=" + i + " n=" + n);
++i;
++n;
}
public static int print(String str) {
System.out.println((k++) + ":" + str + " i=" + i + " n=" + n);
++n;
return ++i;
}
public static void main(String args[]) {
new InitializeDemo("init");
}
}

 

06-08

-Q1:请问Java中接口与抽象类的区别是什么?应该如何从二者中做选择?请编写代码Demo说明。

-Q2:继承与组合的优势分别是?应该如何选择?

-Q3:请问 final类、final方法与普通类、普通方法的区别是什么?

-Q4:请问 overload和override的区别?overload的方法是否可以改变返回值的类型?

-Q5:请问 final, finally, finalize的区别?请编写代码Demo说明。

 

09-10

-Q1:请写一个程序模拟几种常见的Exception,如果catch与try块中有return语句,finally块还会执行吗?

-Q2:请解释this和super关键字的使用场景和作用?请编写代码Demo说明。

-Q3:JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

-Q4:请写出以下程序的输出结果?(ps:结合Java内部类)

public class OuterClass{
private class InterClass{
public InterClass(){
System.out.println(“InterClass Create”);
}
}

public OuterClass(){
InterClass ic = new InterClass();
System.out.println(“OuterClass Create”);
}

public static void main(String[] args){
OuterClass oc = new OuterClass();
}
}

-Q5:请问Java匿名内部类怎样创建?有什么作用和优点?请编写代码Demo说明。

 

11-12

-Q1:String类的==与equals区别是什么?StringBuffer与StringBuilder的区别是什么?如何选用?

-Q2:请用Java实现斐波那契数列(递归+非递归方式)。

-Q3:输入一个字符串,打印出该字符串中字符的所有排列。如:输入字符串abc,则打印出字符a、b、c所能排列出的所有字符串abc、acb、bac、bca、cab和cba。

-Q4:请解释Java中List、Set和Map的区别和应用场景?

-Q5:请尽可能多的写出遍历map元素的方法。请编写代码Demo说明。

 

13-15

-Q1:Java中字符流与字节流有什么区别?分别采用哪些类来读取/写入?

-Q2:请解释HashMap的工作原理是什么?HashMap与HashTable的区别是什么?

-Q3:给定一个文件和一个字符串,请判断文件是否包含该字符串。如包含,请打印出包含该字符串的行号及该行的全部内容。

-Q4:请解释enum(枚举)的用法,且请编写代码Demo说明。

-Q5:请编写一段代码,实现合并两个排序的链表。

 

16

-Q1:请解释单例模式及其应用场景,且编写代码Demo说明。

-Q2:请解释工厂模式及其应用场景,且编写代码Demo说明。

-Q3:抽象工厂模式和原型模式之间的区别?

-Q4:请解释建造者模式及其应用场景,且编写代码Demo说明。

-Q5:请解释门面模式及其应用场景,且编写代码Demo说明。

 

推荐书籍:

《Java编程思想》:https://item.jd.com/10058164.html

 PDF

 

《Java核心技术》:https://item.jd.com/12037418.html

 PDF

 

 

相关博客:

ImportNew:http://www.importnew.com/

技术小黑屋:http://droidyue.com/

InfoQ:http://www.infoq.com/cn/

 

 

 

  CoderMaster

17.Java虚拟机垃圾回收原理与过程。

18.Java泛型的使用与编译器类型擦除,泛型接口与泛型方法。

19.反射的机制与使用,包括方法、属性的动态调用等。

20.Java进程与线程的理解,线程的创建与线程间通信方式,线程池的作用与原理。

21.学习Thread、Executor的使用,并了解几类Executor的实现与应用场景。

22.原子类的理解与使用,临界区与线程同步的几种方式,死锁的产生与解除。

23.synchronized同步代码块或方法。

-Q1:请说出垃圾回收的流程与常见的回收机制,哪些写法会导致内存泄露(无法回收)?

-Q2:Class类的含义和作用是什么?编写一个程序,通过反射实现动态构造类对象、检测类属性和方法、灵活调用对象的方法

-Q3:Java多线程间如何实现同步?Java线程池如何实现?编写一个程序,模拟多个线程的下载任务,并控制最大同时下载任务数量(不使用线程池)

-Q4:synchronized在同步一个类、类方法、类静态方法、代码块时,作用的对象分别是?

-Q5:请问死锁产生的原因?请写出一个死锁的代码Demo。

-Q6:在我们的开发任务中,最常见的一项工作就是解析并读取各种词表文件,请设计并实现一个通用的词表解析读取工具类(一个或者几个class组成),

解析并读取如下形式的词表:

<col1>\t<col2>\t...\t<coln>

每一行都是一条记录,每一列可能的类型包括:

* int
* float
* String
* 形如num:item1,item2,item3的数组(可以理解为T[num]的数组,T是用户给出某种build-in类型)
* 其他用户自定义类型(需要灵活支持多种自定义类型)

每一列的数据中均不包含\t字符,每一行以\n结尾。

要求:

1. 对于非用户自定义类型,封装解析行为;用户自定义类型,调用用户给出的parse函数(从String翻译成用户class)完成
* 提示,要将String翻译为内部类型或用户自定义类型,而不是简单的字符串切分。


2. 用户能通过某些形式,定制这个词表的结构,指明每一列的类型是什么
3. 用户能逐行读取这个词表的信息,即按序读取每一行,然后能解析出这一行中的每一列内容
* 提示,实现line by line的解析功能即可,不要求把整个词表存储到内存中(感兴趣的话也可以搞搞)


4. 容错采用出错则报警并跳过整行记录的方式,但不论输入任何错误数据,程序不能出core
5. API设计友好,做到自解释
6. 代码严格遵守百度编码规范
7. 代码的可读性和可维护性好
8. 完成相应的单元测试和使用demo, 你的代码必须可编译, Demo可运行, 单元测试有效而且通过;
* 提示,demo也要符合编码规范,:-)

进阶书籍:

《Effective Java》:https://item.jd.com/10058902.html

 

《深入理解Java虚拟机》:https://item.jd.com/11252778.html

 

《Java并发编程实战》:https://item.jd.com/10922250.html

 PDF

 

《算法》:https://item.jd.com/11098789.html

《Head First 设计模式》:https://item.jd.com/10100236.html

 

相关博客:

ImportNew:http://www.importnew.com/

技术小黑屋:http://droidyue.com/

InfoQ:http://www.infoq.com/cn/

         
Object C GoodCoder      
  CoderMaster      
         
         

 

 

 

posted @ 2020-12-01 12:10  凯哥888  阅读(412)  评论(0)    收藏  举报