From dff02c6e19a9917f7b1015ab966f492018f5af06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=80=C3=AE=C3=97=C3=9A=C3=95=C3=B1?= Date: Wed, 21 Sep 2022 17:32:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=88=B6=E7=AE=80=E5=8E=86=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/re_to_jianli.py | 1421 ++++++++++++++++++++++++++++++++++------- 1 file changed, 1186 insertions(+), 235 deletions(-) diff --git a/utils/re_to_jianli.py b/utils/re_to_jianli.py index f23ffbf..36a6713 100644 --- a/utils/re_to_jianli.py +++ b/utils/re_to_jianli.py @@ -123,10 +123,10 @@ def fmt_txt(chk_str): if education in true_chkStr: dict_chk['education'] = education break - + true_chkStr = true_chkStr.replace('---', '-').replace('', '') # 工作经历 work_exp = re.findall(r'.*?工作经验.*?\n', true_chkStr, re.M) - if work_exp: + if work_exp and work_exp[0].strip('\n').strip() != '工作经验': work_exp_str = work_exp[0].replace('\n', '') if '|' in work_exp_str: work_exp_list = work_exp_str.split('|') @@ -135,14 +135,35 @@ def fmt_txt(chk_str): for i in work_exp_list: if '工作经验' in i: true_work_exp_str = i.strip().replace('?', '') - dict_chk['work_exp'] = int(true_work_exp_str.split('年工作经验')[0]) + if ':' in true_work_exp_str: + dict_chk['work_exp'] = int(true_work_exp_str.split('年工作经验')[0].split(':')[-1]) + else: + dict_chk['work_exp'] = int(true_work_exp_str.split('年工作经验')[0]) break else: work_exp = re.findall(r'.*?工作年限.*?\n', true_chkStr, re.M) # 工作经验 if work_exp: work_exp_str = work_exp[0].replace('\n', '') if ':' in work_exp_str: - dict_chk['work_exp'] = int(work_exp_str.split(':')[-1].strip().split('年')[0]) + work_exp = work_exp_str.split(':')[1].strip().split('年')[0] + dict_int_year = { + '一': 1, + '二': 2, + '三': 3, + '四': 4, + '五': 5, + '六': 6, + '七': 7, + '八': 8, + '九': 9 + } + if work_exp in ['一', '二', '三', '四', '五', '六', '七', '八', '九']: + work_exp1 = dict_int_year.get(work_exp) + else: + if '.' in work_exp: + work_exp = work_exp.split('.')[0] + work_exp1 = int(work_exp) + dict_chk['work_exp'] = work_exp1 else: dict_chk['work_exp'] = 0 @@ -174,7 +195,7 @@ def fmt_txt(chk_str): if len(school_list) <= 1: new_chk_str = true_chkStr.split('教育经历')[-1] - if new_chk_str: + if new_chk_str and '教育经历' in true_chkStr: bold = re.compile(r'\n') true_chk = bold.sub(' ', new_chk_str, count=3) school_str1 = re.findall(r'.*?学院.*?\n', true_chk, re.M)[0].replace('\n', '') @@ -206,7 +227,7 @@ def fmt_txt(chk_str): dict_chk['at_school'] = (school_list[index] + school_list[index + 1] + school_list[index + 2]).replace( '.', '/') continue - if chk_i: + if chk_i and '☆' not in chk_i: dict_chk['specialty'] = chk_i.replace('?', '').strip() continue else: @@ -259,7 +280,10 @@ def fmt_txt(chk_str): age = re.findall(r'.*?龄:.*?\n', true_chkStr, re.M) if age: age_str = age[0].replace(' ', '').replace('\n', '') - dict_chk['age'] = int(age_str.split(':')[-1]) + if age_str.split(':')[-1].isdigit(): + dict_chk['age'] = int(age_str.split(':')[-1]) + else: + dict_chk['age'] = int("".join(re.findall("\d+",age_str))) else: age1 = re.findall(r'[0-9]{2}.*?岁', true_chkStr, re.M) if age1: @@ -272,10 +296,12 @@ def fmt_txt(chk_str): nation = re.findall(r'.*?族:.*?\n', true_chkStr, re.M) if nation: nation_str = nation[0].replace(' ', '').replace('\n', '') - dict_chk['nation'] = int(nation_str.split(':')[-1]) + if '☆' in nation_str: + dict_chk['nation'] = nation_str.split('☆')[1].split(':')[-1] + else: + dict_chk['nation'] = nation_str.split(':')[-1] else: dict_chk['nation'] = '汉' - if '工作经历' not in true_chkStr: work_undergo_str = true_chkStr.split('工作经验')[-1] else: @@ -290,178 +316,39 @@ def fmt_txt(chk_str): if '项目名称' in work_str2: project_undergo = ''.join(i for i in work_str2.split('项目名称')[1:]) work_str2 = work_str2.split('项目名称')[0] + else: + if '项目简介' in work_str2: + project_undergo = ''.join(i for i in work_str2.split('项目简介')[:]) + # work_str2 = work_str2.split('项目简介')[0] project_undergo2 = project_undergo.strip().strip('\n') str_2 = re.split('([0-9]{4}[/|.][0-9]{1,2})', work_str2) project_list = re.split('([0-9]{4}[/|.][0-9]{1,2})', project_undergo2) + if len(project_list) <= 1: + if ':' in project_undergo2: + project_list = work_undergo_str.split('项目经验')[-1].strip('\n').split('项目名称') work_list = [] project_undergo_list = [] if project_list[0] == '': project_list = project_list[1:] - # 数字开头 - if project_list[0][0].isdigit() and project_list[0][1] != '、': - index2 = -1 - new_str_list1 = [] - for index, i in enumerate(project_list): - if index <= index2: - continue - if not i: - continue - if i.strip() == '-': - index2 = index + 2 - new_str = project_list[index - 1] + i + project_list[index + 1] + project_list[index + 2] - new_str_list1.append(new_str) - continue - if i.strip() != '-' and '-' in i: - index2 = index - new_str = project_list[index - 1] + i - new_str_list1.append(new_str) - continue - if new_str_list1: - for project_str in new_str_list1: - project_name_time_str = project_str.split('\n')[0] - dict_project = { - 'name': '', - 'time': '', - 'comment': '', - 'work': '', - 'duty': '', - } - project_name_time_str2 = re.split('([0-9]{4}[/|.][0-9]{1,2})', project_name_time_str) - if project_name_time_str2: - for index, p_str in enumerate(project_name_time_str2): - if not p_str: - continue - if p_str[0].isdigit(): - dict_project['time'] = (p_str + project_name_time_str2[index + 1] + project_name_time_str2[ - index + 2]).replace('.', '/') - dict_project['name'] = project_name_time_str2[index + 3] - break - project_chk_str2 = project_str.split(project_name_time_str)[-1] - project_chk_str2_list = re.split('(:|:)', project_chk_str2) - if project_chk_str2_list: - index3 = -1 - start_name = '' - new_p_chk_list = [] - for index, p_str3 in enumerate(project_chk_str2_list): - if index <= index3: - continue - if p_str3 in [':', ':']: - if not re.split('[\n|\t]', project_chk_str2_list[index + 1])[0].strip() and len( - project_chk_str2_list[index + 1]) <= 5: - continue - start_name = project_chk_str2_list[index + 1].split('\n')[-1] - if start_name: - new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ - project_chk_str2_list[index + 1].split(start_name)[0] - else: - new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ - project_chk_str2_list[index + 1] - new_p_chk_list.append(new_p_str) - if new_p_chk_list: - for p_str_true in new_p_chk_list: - if '开发环境' in p_str_true or '开发工具' in p_str_true or '开发技术' in p_str_true or '模块' in p_str_true: - dict_project['work'] += re.split('[:|:]', p_str_true)[-1] - continue - if '项目描述' in p_str_true or '功能介绍' in p_str_true: - dict_project['comment'] += re.split('[:|:]', p_str_true)[-1] - continue - if '职责' in p_str_true: - dict_project['duty'] += re.split('[:|:]', p_str_true)[-1] - continue - project_undergo_list.append(dict_project) - # 项目名开头 - else: - if project_undergo2.startswith(':') or project_undergo2.startswith(':'): - dict_project = { - 'name': '', - 'time': '', - 'comment': '', - 'work': '', - 'duty': '', - } - new_str_list1 = [] + if project_list: + # 数字开头 + if project_list[0][0].isdigit() and project_list[0][1] != '、': index2 = -1 - for index, i in enumerate(project_list): - if not i[0].isdigit() and i != '-': - if index <= index2: - continue - index2 = index + 3 - if len(project_list) < index2 + 1: - break - else: - new_str = i + project_list[index + 1] + project_list[index + 2] + project_list[index + 3] - new_str_list1.append(new_str) - if new_str_list1: - for project_chk_str2 in new_str_list1: - project_chk_str2_list = re.split('(:|:)', project_chk_str2) - if project_chk_str2_list: - index3 = -1 - new_p_chk_list = [] - for index, p_str3 in enumerate(project_chk_str2_list): - if index <= index3: - continue - if p_str3 in [':', ':']: - if not re.split('[\n|\t]', project_chk_str2_list[index + 1])[0].strip() and len( - project_chk_str2_list[index + 1]) <= 10: - continue - start_name = project_chk_str2_list[index + 1].split('\n')[-1] - if start_name: - new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ - project_chk_str2_list[index + 1].split(start_name)[0] - else: - new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ - project_chk_str2_list[index + 1] - new_p_chk_list.append(new_p_str) - if new_p_chk_list: - dict_project['name'] = re.split('[:|:]', new_p_chk_list[0])[-1] - for p_str_true in new_p_chk_list: - if '开发环境' in p_str_true or '开发工具' in p_str_true or '开发技术' in p_str_true or '模块' in p_str_true: - dict_project['work'] += re.split('[:|:]', p_str_true)[-1] - continue - if '项目描述' in p_str_true or '功能介绍' in p_str_true: - dict_project['comment'] += re.split('[:|:]', p_str_true)[-1] - continue - if '职责' in p_str_true: - dict_project['duty'] += re.split('[:|:]', p_str_true)[-1] - continue - project_undergo_list.append(dict_project) - else: - index2 = -1 - name2 = '' new_str_list1 = [] for index, i in enumerate(project_list): if index <= index2: continue if not i: continue - if i.strip() == '-': + chk_i = i.strip() + if chk_i in ['-', '–', '―']: index2 = index + 2 - if not name2: - name3 = project_list[index + 2].split('\n')[-1] - new_str = project_list[index - 2] + project_list[index - 1] + i + project_list[index + 1] + \ - project_list[index + 2].split(name3)[0] - name2 = name3 - else: - name3 = project_list[index + 2].split('\n')[-1] - if name2: - new_str = name2 + project_list[index - 1] + i + project_list[index + 1] + \ - project_list[index + 2].split(name3)[0] - else: - new_str = name2 + project_list[index - 1] + i + project_list[index + 1] + \ - project_list[index + 2] - name2 = name3 + new_str = project_list[index - 1] + i + project_list[index + 1] + project_list[index + 2] new_str_list1.append(new_str) continue - if i.strip() != '-' and '-' in i: + if chk_i not in ['-', '–', '―'] and ('-' in chk_i or '–' in chk_i or '―' in chk_i): index2 = index - if not name2: - name3 = i.split('\n')[-1] - new_str = str_2[index - 2] + str_2[index - 1] + i.split(name3)[0] - name2 = name3 - else: - name3 = i.split('\n')[-1] - new_str = str_2[index - 2] + str_2[index - 1] + i.split(name3)[0] - name2 = name3 + new_str = project_list[index - 1] + chk_i new_str_list1.append(new_str) continue if new_str_list1: @@ -480,51 +367,252 @@ def fmt_txt(chk_str): if not p_str: continue if p_str[0].isdigit(): - if u'\u4e00' <= project_name_time_str2[index + 1].strip()[0] <= u'\u9fff': - dict_project['time'] = p_str.replace('.', '/') - dict_project['name'] = project_name_time_str2[index + 1].split(' ')[-2] - dict_project['work'] = project_name_time_str2[index + 1].split(' ')[-1] - break + dict_project['time'] = (p_str + project_name_time_str2[index + 1] + project_name_time_str2[ + index + 2]).replace('.', '/') + name_str = project_name_time_str2[index + 3].strip() + if ' ' in name_str: + name = name_str.split(' ')[0] else: - dict_project['time'] = ( + name = name_str + dict_project['name'] = name + break + project_chk_str2 = project_str.split(project_name_time_str)[-1] + if project_chk_str2.replace('\n', '').replace('■', '').strip().startswith(dict_project['name']): + new_chk_project = project_chk_str2.replace('\n', '').replace('■', '').strip() + dict_project['comment'] += new_chk_project.split('职责')[0] + dict_project['duty'] += new_chk_project.split('职责')[1].split('相关技术')[0] + dict_project['work'] += new_chk_project.split('职责')[1].split('相关技术')[-1] + else: + project_chk_str2_list = re.split('(:|:)', project_chk_str2) + if project_chk_str2_list: + index3 = -1 + start_name = '' + new_p_chk_list = [] + for index, p_str3 in enumerate(project_chk_str2_list): + if index <= index3: + continue + if dict_project['name'] in p_str3: + dict_project['comment'] += p_str3.split('\n\n')[0] + if p_str3 in [':', ':']: + if not re.split('[\n|\t]', project_chk_str2_list[index + 1])[0].strip() and len( + project_chk_str2_list[index + 1]) <= 5: + continue + start_name = project_chk_str2_list[index + 1].split('\n')[-1] + if start_name: + new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ + project_chk_str2_list[index + 1].split(start_name)[0] + else: + new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ + project_chk_str2_list[index + 1] + new_p_chk_list.append(new_p_str) + if new_p_chk_list: + for p_str_true in new_p_chk_list: + if '开发环境' in p_str_true or '开发工具' in p_str_true or '开发技术' in p_str_true or '模块' in p_str_true: + if '职责' in p_str_true: + dict_project['duty'] += p_str_true.split('职责')[-1].split('相关技术')[0] + dict_project['work'] += p_str_true.split('职责')[-1].split('相关技术')[1] + else: + dict_project['work'] += re.split('[:|:]', p_str_true)[-1] + continue + if '项目描述' in p_str_true or '功能介绍' in p_str_true: + dict_project['comment'] += re.split('[:|:]', p_str_true)[-1] + continue + if '职责' in p_str_true: + dict_project['duty'] += re.split('[:|:]', p_str_true)[-1] + continue + project_undergo_list.append(dict_project) + # 项目名开头 + else: + if project_undergo2.startswith(':') or project_undergo2.startswith(':'): + dict_project = { + 'name': '', + 'time': '', + 'comment': '', + 'work': '', + 'duty': '', + } + if '-' in project_list or '–' in project_list or '―' in project_list: + new_str_list1 = [] + index2 = -1 + for index, i in enumerate(project_list): + if not i[0].isdigit() and i not in ['-', '–', '―']: + if index <= index2: + continue + index2 = index + 3 + if len(project_list) < index2 + 1: + break + else: + new_str = i + project_list[index + 1] + project_list[index + 2] + project_list[index + 3] + new_str_list1.append(new_str) + if new_str_list1: + for project_chk_str2 in new_str_list1: + project_chk_str2_list = re.split('(:|:)', project_chk_str2) + if project_chk_str2_list: + index3 = -1 + new_p_chk_list = [] + for index, p_str3 in enumerate(project_chk_str2_list): + if index <= index3: + continue + if p_str3 in [':', ':']: + if not re.split('[\n|\t]', project_chk_str2_list[index + 1])[0].strip() and len( + project_chk_str2_list[index + 1]) <= 10: + continue + start_name = project_chk_str2_list[index + 1].split('\n')[-1] + if start_name: + new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ + project_chk_str2_list[index + 1].split(start_name)[0] + else: + new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ + project_chk_str2_list[index + 1] + new_p_chk_list.append(new_p_str) + if new_p_chk_list: + dict_project1 = copy.deepcopy(dict_project) + dict_project1['name'] = re.split('[:|:]', new_p_chk_list[0])[-1] + for p_str_true in new_p_chk_list: + if '开发环境' in p_str_true or '开发工具' in p_str_true or '开发技术' in p_str_true or '模块' in p_str_true: + dict_project1['work'] += re.split('[:|:]', p_str_true)[-1] + continue + if '项目描述' in p_str_true or '功能介绍' in p_str_true: + dict_project1['comment'] += re.split('[:|:]', p_str_true)[-1] + continue + if '职责' in p_str_true: + dict_project1['duty'] += re.split('[:|:]', p_str_true)[-1] + continue + project_undergo_list.append(dict_project1) + else: + for project_str_i in project_list: + if project_str_i: + project_str_list = project_str_i.split('\n') + if project_str_list: + dict_project1 = copy.deepcopy(dict_project) + dict_project1['name'] = project_str_list[0].split(':')[-1] + chk_key = '' + for index, i in enumerate(project_str_list[1:]): + if not i or i.isdigit(): + continue + if ':' not in i and chk_key: + dict_project1[chk_key] += i + continue + if i.startswith('开发周期'): + dict_project1['time'] = i.split(':')[-1] + continue + if i.startswith('开发环境'): + dict_project1['work'] += i.split(':')[-1] + chk_key = 'work' + continue + if i.startswith('功能模块'): + dict_project1['duty'] = i.split(':')[-1] + chk_key = 'duty' + continue + if i.startswith('项目描述'): + dict_project1['comment'] += i.split(':')[-1] + chk_key = 'comment' + continue + if i.startswith('技术要点'): + dict_project1['work'] += i.split(':')[-1] + chk_key = 'work' + continue + project_undergo_list.append(dict_project1) + else: + index2 = -1 + name2 = '' + new_str_list1 = [] + for index, i in enumerate(project_list): + if index <= index2: + continue + if not i: + continue + if i.strip() not in ['-', '–', '―']: + index2 = index + 2 + if not name2: + name3 = project_list[index + 2].split('\n')[-1] + new_str = project_list[index - 2] + project_list[index - 1] + i + project_list[index + 1] + \ + project_list[index + 2].split(name3)[0] + name2 = name3 + else: + name3 = project_list[index + 2].split('\n')[-1] + if name2: + new_str = name2 + project_list[index - 1] + i + project_list[index + 1] + \ + project_list[index + 2].split(name3)[0] + else: + new_str = name2 + project_list[index - 1] + i + project_list[index + 1] + \ + project_list[index + 2] + name2 = name3 + new_str_list1.append(new_str) + continue + if i.strip() not in ['-', '–', '―'] and ('-' in i or '–' in i or '―' in i): + index2 = index + if not name2: + name3 = i.split('\n')[-1] + new_str = str_2[index - 2] + str_2[index - 1] + i.split(name3)[0] + name2 = name3 + else: + name3 = i.split('\n')[-1] + new_str = str_2[index - 2] + str_2[index - 1] + i.split(name3)[0] + name2 = name3 + new_str_list1.append(new_str) + continue + if new_str_list1: + for project_str in new_str_list1: + project_name_time_str = project_str.split('\n')[0] + dict_project = { + 'name': '', + 'time': '', + 'comment': '', + 'work': '', + 'duty': '', + } + project_name_time_str2 = re.split('([0-9]{4}[/|.][0-9]{1,2})', project_name_time_str) + if project_name_time_str2: + for index, p_str in enumerate(project_name_time_str2): + if not p_str: + continue + if p_str[0].isdigit(): + if u'\u4e00' <= project_name_time_str2[index + 1].strip()[0] <= u'\u9fff': + dict_project['time'] = p_str.replace('.', '/') + dict_project['name'] = project_name_time_str2[index + 1].split(' ')[-2] + dict_project['work'] = project_name_time_str2[index + 1].split(' ')[-1] + break + else: + dict_project['time'] = ( p_str + project_name_time_str2[index + 1] + project_name_time_str2[ index + 2]).replace('.', '/') - dict_project['name'] = project_name_time_str2[index - 1] + dict_project['name'] = project_name_time_str2[index - 1] - break - project_chk_str2 = project_str.split(project_name_time_str)[-1] - project_chk_str2_list = re.split('(:|:)', project_chk_str2) - if project_chk_str2_list: - index3 = -1 - start_name = '' - new_p_chk_list = [] - for index, p_str3 in enumerate(project_chk_str2_list): - if index <= index3: - continue - if p_str3 in [':', ':']: - if not re.split('[\n|\t]', project_chk_str2_list[index + 1])[0].strip() and len( - project_chk_str2_list[index + 1]) <= 10: + break + project_chk_str2 = project_str.split(project_name_time_str)[-1] + project_chk_str2_list = re.split('(:|:)', project_chk_str2) + if project_chk_str2_list: + index3 = -1 + start_name = '' + new_p_chk_list = [] + for index, p_str3 in enumerate(project_chk_str2_list): + if index <= index3: continue - start_name = project_chk_str2_list[index + 1].split('\n')[-1] - if start_name: - new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ - project_chk_str2_list[index + 1].split(start_name)[0] - else: - new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ - project_chk_str2_list[index + 1] - new_p_chk_list.append(new_p_str) - if new_p_chk_list: - for p_str_true in new_p_chk_list: - if '开发环境' in p_str_true or '开发工具' in p_str_true or '开发技术' in p_str_true or '模块' in p_str_true: - dict_project['work'] += re.split('[:|:]', p_str_true)[-1] - continue - if '项目描述' in p_str_true or '功能介绍' in p_str_true: - dict_project['comment'] += re.split('[:|:]', p_str_true)[-1] - continue - if '职责' in p_str_true: - dict_project['duty'] += re.split('[:|:]', p_str_true)[-1] - continue - project_undergo_list.append(dict_project) + if p_str3 in [':', ':']: + if not re.split('[\n|\t]', project_chk_str2_list[index + 1])[0].strip() and len( + project_chk_str2_list[index + 1]) <= 10: + continue + start_name = project_chk_str2_list[index + 1].split('\n')[-1] + if start_name: + new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ + project_chk_str2_list[index + 1].split(start_name)[0] + else: + new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ + project_chk_str2_list[index + 1] + new_p_chk_list.append(new_p_str) + if new_p_chk_list: + for p_str_true in new_p_chk_list: + if '开发环境' in p_str_true or '开发工具' in p_str_true or '开发技术' in p_str_true or '模块' in p_str_true: + dict_project['work'] += re.split('[:|:]', p_str_true)[-1] + continue + if '项目描述' in p_str_true or '功能介绍' in p_str_true: + dict_project['comment'] += re.split('[:|:]', p_str_true)[-1] + continue + if '职责' in p_str_true: + dict_project['duty'] += re.split('[:|:]', p_str_true)[-1] + continue + project_undergo_list.append(dict_project) dict_chk['project_undergo'] = project_undergo_list # 数字开头 @@ -536,12 +624,12 @@ def fmt_txt(chk_str): continue if not i: continue - if i.strip() == '-': + if i.strip() in ['-', '–', '―']: index1 = index + 2 new_str = str_2[index - 1] + i + str_2[index + 1] + str_2[index + 2] new_str_list.append(new_str) continue - if i.strip() != '-' and '-' in i: + if i.strip() not in ['-', '–', '―'] and ('-' in i or '–' in i or '―' in i): index1 = index new_str = str_2[index - 1] + i new_str_list.append(new_str) @@ -549,24 +637,40 @@ def fmt_txt(chk_str): if new_str_list: dict_chk['work_undergo'] = new_str_list for work_str in new_str_list: - new_str_list1 = work_str.split('工作描述') - work_dict = { - 'company_name': '', - 'time': '', - 'position_name': '', - 'duty': new_str_list1[-1], - } + if '工作描述' in work_str: + new_str_list1 = work_str.split('工作描述') + work_dict = { + 'company_name': '', + 'time': '', + 'position_name': '', + 'duty': new_str_list1[-1], + } - new_str_list2 = new_str_list1[0].split('\n') - if '?' in new_str_list1[0]: - work_dict['time'] = new_str_list2[0].split('??')[0].replace('.', '/') - work_dict['company_name'] = new_str_list2[0].split('??')[1] - work_dict['position_name'] = new_str_list2[1].split('|')[0] + new_str_list2 = new_str_list1[0].split('\n') + if '?' in new_str_list1[0]: + work_dict['time'] = new_str_list2[0].split('??')[0].replace('.', '/') + work_dict['company_name'] = new_str_list2[0].split('??')[1] + work_dict['position_name'] = new_str_list2[1].split('|')[0] + else: + work_dict['time'] = new_str_list2[0].split(' ')[0].replace('.', '/') + work_dict['company_name'] = new_str_list2[0].split(' ')[1] + work_dict['position_name'] = new_str_list2[1].split('|')[0] else: - work_dict['time'] = new_str_list2[0].split(' ')[0].replace('.', '/') - work_dict['company_name'] = new_str_list2[0].split(' ')[1] - work_dict['position_name'] = new_str_list2[1].split('|')[0] - work_list.append(work_dict) + work_dict = { + 'company_name': '', + 'time': '', + 'position_name': '', + 'duty': '', + } + new_str_list = work_str.split('\n') + for i in new_str_list: + if '公司' in i and ' ' in i: + work_dict['time'] = i.split(' ')[0] + work_dict['company_name'] = i.split(' ')[-1] + continue + + if work_dict['company_name']: + work_list.append(work_dict) # 公司名开头 else: index1 = -1 @@ -577,7 +681,7 @@ def fmt_txt(chk_str): continue if not i: continue - if i.strip() == '-': + if i.strip() in ['-', '–', '―']: index1 = index + 2 if not name: name1 = str_2[index + 2].split('\n')[-1] @@ -593,7 +697,7 @@ def fmt_txt(chk_str): name = name1 new_str_list.append(new_str) continue - if i.strip() != '-' and '-' in i: + if i.strip() not in ['-', '–', '―'] and ('-' in i or '–' in i or '―' in i): index1 = index if not name: name1 = i.split('\n')[-1] @@ -608,7 +712,7 @@ def fmt_txt(chk_str): if new_str_list: dict_chk['work_undergo'] = new_str_list for work_str in new_str_list: - new_str_list1 = work_str.split('\n') + new_str_list1 = work_str.strip(':').strip().split('\n') work_dict = { 'company_name': '', 'time': '', @@ -617,13 +721,20 @@ def fmt_txt(chk_str): } new_str_list2 = new_str_list1[0].split(' ', 1) work_dict['company_name'] = new_str_list2[0] - work_dict['time'] = new_str_list2[1] - - work_dict['position_name'] = new_str_list1[1].split(':')[-1] - work_duty = new_str_list1[3:] - duty1 = new_str_list1[2].split('职责')[-1] - duty = duty1.join((x for x in work_duty)) - work_dict['duty'] = duty + if ':' in new_str_list2[1]: + work_dict['time'] = new_str_list2[1].split(':')[-1].replace('.', '/').strip() + elif ':' in new_str_list2[1]: + work_dict['time'] = new_str_list2[1].split(':')[-1].replace('.', '/').strip() + else: + work_dict['time'] = new_str_list2[1].replace('.', '/').strip() + if len(new_str_list1) > 1: + if ':' in new_str_list1[1]: + work_dict['position_name'] = new_str_list1[1].split(':')[-1] + if work_dict['position_name']: + work_duty = new_str_list1[3:] + duty1 = new_str_list1[2].split('职责')[-1] + duty = duty1.join((x for x in work_duty)) + work_dict['duty'] = duty work_list.append(work_dict) dict_chk['work_list'] = work_list review = '' @@ -641,6 +752,7 @@ def fmt_txt(chk_str): if '自我描述' in review_chk: review = review_chk.split('自我描述')[-1] dict_chk['review'] = review + if '教育经历' in true_chkStr: upgrade = true_chkStr.split('教育经历')[-1] upgrade = upgrade.strip().strip('\n') @@ -678,8 +790,8 @@ def fmt_txt(chk_str): } if '??' in i: dict_rem = { - "prize_name": i.split('??')[1], - "prize_time": i.split('??')[0] + "prize_name": i.split('??')[1], + "prize_time": i.split('??')[0] } else: re_list = re.split('([0-9]{4}[.|/][0-9]{1,2})', i) @@ -758,6 +870,13 @@ def fmt_txt(chk_str): remembrance.append(str_rem) else: remembrance.append({"prize_name": name, "prize_time": time}) + else: + if '专业技能' in upgrade: + specialty_do_str = upgrade.split('专业技能')[-1].split('工作经验')[0] + specialty_do = [i for i in specialty_do_str.split('\n') if i.strip() != ''] + if '技能' in upgrade: + specialty_do_str = upgrade.split('技能')[-1].split('项目经验')[0] + specialty_do = [i.strip('') for i in specialty_do_str.split('\n') if i.strip() not in ['', '']] dict_chk['remembrance'] = remembrance dict_chk['specialty_do'] = specialty_do dict_chk['language'] = language @@ -765,7 +884,9 @@ def fmt_txt(chk_str): if __name__ == '__main__': - # txt = getText_pdf('D:\wokerplay\面试简历1\Android高级开发工程师-方明洋-拉勾招聘.pdf') + # txt = getText_pdf('D:\wokerplay\面试简历\【Android开发工程师_武汉】陈超峰 10年.pdf') + # if txt: + # pass # 拉勾 chk_str1 = """ @@ -1356,5 +1477,835 @@ vms视频和grafana监控系统; 我一定好好珍惜,认真工作,努力提升自己的专业能力,为公司创造更大的价值。 """ + # 自制简历1 + chk_str7 = """ + + +个人简历 + +个人概况 + +☆ 姓 名:徐小龙 ☆ 性 别:男 +☆ 民 族:汉 ☆ 毕业院校:华中科技大学 +☆ 工作年限:四年 ☆ 专 业:计算机科学与技术 +☆ 电子邮件:xiao125long@gmail.com ☆ 联系电话:13100715231 +☆ GitHub:https://github.com/xiaolong125 + + +专业技能 + 1、熟练掌握性能优化、进程保活、启动加速、懒加载、APK 瘦身、屏幕适配、多渠道打包 +等常用开发技巧。 +2、熟悉Android 事件分发机制,view 绘制流程、动画,熟练掌握自定义控件的开发 +3、熟悉Android 架构,MVP、MVC、MVVM模式,熟悉Jectpack 组件。 +4、熟悉热更新、插件化、组件化等开发技术。 +5、熟悉常用设计模式; +6、熟悉常用SDK 接入,熟悉SDK 封装。 +7、熟悉Android 消息通信机制 +8、熟悉kotlin +9、熟悉http 通信协议 +10、熟悉Retrofit、RxJava、Glide 等常用框架使用和原理 + +工作经验 + + 2020/2 – 2020/6 STW Power +■ +项目简介 +STW Power 是一个海外版充电宝项目,用户通过扫描二维码可以使用充电宝。 + + + +项目下载地址:https://play.google.com/store/apps/details?id=com.swt.power +职责 +此项目为疫情期间朋友介绍,负责 STW Power 项目bug修改、支付模块重构和 SDK接入、 +UI修改和产品上架,已在 Google Play上架。 +相关技术 + 1、项目整体采用MVP架构开发, 重构的支付模块使用了 Kotlin + MVVM +组件化 +2、Retrofit2+Rxjava2 作为网络请求框架 +3、Google Pay 、PayTabs、Payfort、Gate2Payment 等多种支付方式 +4、Google FaceBook第三方登录 + +2018/1 – 2019/11 融合通信 武汉惟实信科技有限公司 +■ +项目简介 +融合通信是一个在公安内网用于快速指挥调度系统,将 350M和800M 电台与4G +网络对接,实现多端通信。该产品已在警务通应用商店已经上架,武汉市公安局、襄 +阳市公安局、湖北省应急管理厅等多家单位已经开始使用。 +职责 +功能开发、性能优化、bug修改、设备适配、SDK封装、第三方SDK接入、重构 +等工作。 +相关技术 +1、 DDPush和Netty 实现客户端和信令服务长连接 +2、 EasyPush和EasyPlayer实现直播推拉流功能 +3、 状态机模式管理终端各种状态,防止业务冲突 +4、 AIDL 实现双进程通信 +5、 Linphone 实现voip 电话功能 +6、 集成大疆SDK将无人机画面转成视频流推送到流媒体服务和控制飞行 + + + + + + + + +2017/7 – 2017/12 东风金融 武汉盛典网络科技有限公司 +■ +项目简介 +东风金融是外包东风汽车财务有限公司的 APP,有乘用车和商用车两款。乘用车 +是做个人贷款买车、商用车是做企业贷款买车。该 APP是供东风公司的经销商人员使 +用,方便其录入客户信息、确认合同、放款申请、贷款试算、上传附件等功能。经销 +商已经投入使用。 +职责 +独立开发 +相关技术 +1、 mvp架构 +2、 Retrofit+RxJava 网络请求 +3、 greenDao数据库存储 +4、 OCR识别 + + +2016/8– 2017/6 十二神鹿 深圳丰巨泰科电子有限公司 +■ +项目简介 +十二神鹿是一款智能硬件和商城项目。已在小米、华为等多家应用商店上架。(因 +公司原因已下架) +职责 +项目架构、蓝牙模块、个人中心、支付 +相关技术 +1、 项目整体采用mvp 架构 +2、 使用ble和蓝牙板交互 +3、 接入微信支付和支付宝 +4、 极光统计和推送 + + + + + - fmt_txt(chk_str1) + """ + # 自制简历2 + chk_str8 = """ + 简 历(五年开发经验) +个人资料 +姓 名: 杨锐 性 别: 男 +年 龄: 30 求职岗位: Android开发 +工作年限: 5.5年 联系电话: 18871853529 +E-mail: 18871853529@163.com 期望薪资: 面议 +工作经历: 武汉布偶猫网络技术有限公司 工作时间: 2014.10---2016.6 +杭州四季多美网络技术有限公司 工作时间: 2016.8---2019.3 +武汉绿之云科技有限公司 工作时间: 2019.4---2020.5 +GitHub地址:( https://github.com/yangruikico ) +IT技能 + 熟练使用地图标记,电子围栏,,标记气泡自定义 + 熟练使用IM自定义消息,, + 熟练使用Javascriptinterface 与H5交互 + 精通Android控件的自定义,事件分发机制,异步通信机制(handler) + 精通Android下的Handler和AsyncTask两种异步线程机制 + 熟练掌握android下的rxJava+OkHttp+Retrofit +MVP 封装网络请求 + 熟练掌握OKhttp、PhotoView、ImageLoader、picasso等流行框架 + 熟练掌握LruCache机制,UML(设计用例图,类图,时序图等) + 熟练掌握Android中屏幕适配,内存优化,界面绘制优化 + 熟练掌握Android下的,图片优化,RecycleView的使用和缓存机制 + 熟练掌握Android下网络通信机,Socket 通信、TCP/UDP、Http和XMPP协议 + 熟悉ViewDragHelper处理复杂的拖拽功能 + 熟悉Android多线程断点下载机制 + 熟悉Java中,单例设计模式、工厂模式等常用开发模式 + 熟悉Android下第三方支付、语音识别、定位导航、消息推送以及分享内容至第三方平台 + +Android 项目经验 +项目名称:超警 +开发周期:4个月 (1 人) +开发环境: AndroidStudio SDK 5.0+华为 mate pro20 +功能模块:消息发送及时消息实现单聊,群聊 +1 +指令 加载H5界面显 +工作(+) 我的工作状态 出警 个人警情(tab 列表 加载不同状态的警情,此处聊天的消息跳转 +维实信) 警情详情处理步骤同门户回告 +应用 扫码 微课堂在线学习,计算时长 根据库判断答题结果 处警规范用语,分级查询,语音 +播报使用语音+,, +个人 用户个人信息与修改; 接警声音开关,位置共享,, 来警铃声设置,应急超警mini下载 +技术要点: Android SDK 各种组件,网络通讯,数据存储,UI布局,动画与控件的使用 +第三方库有:OKGO ,glide,,eventbus,,zxing,smartrereshlayout,soulpermisson, +rxjava, GSYVideoPlayer; +项目名称:四季多美好 +开发周期:8个月 (2 人) +开发环境:AndroidStudio +Android SDK5.0+小米4,8+华为荣耀,三星S8,vivo z3 +项目描述:对杭州服装批发市场整合,商家入驻的美好平台,线上供货,平台直播,在线拿货,物流送货 +到家的批发平台,减少买家跑市场现场拿货的次数,商家线上管理,订单分析,快速销货,减少人力成本, +大大提高效率,连接批发商与买家的桥梁。 +功能模块:腾讯云直播、腾讯IM,第三方支付,友盟统计,极光推送,登录注册。 +个人职责:项目架构搭建,整个项目的把控,参与项目的设计及开发,腾讯IM,第三方支付及订单流程, +商品上新及编辑,友盟统计,登录注册 +技术要点: +1. 自定义View : 列表9图显示控件,日期选择控件,相机控件,视频播放控件等 +4、基础框架:rxJava+OkHttp+Retrofit +MVP 封装网络请求 +6、难度界面:店铺首页制作,宝贝详情页与直播界面的仿抖音上下切换 +7、直播:推流上传,拉流观看,点播储存,回放处理 +8、支付:使用easypay处理(对接支付宝,微信,银联) +9、第三方:友盟(统计、分享、登录),极光推送,百度地图,腾讯云im(直聊、单聊) +项目名称:布偶猫 +开发周期:4个月 (2 人) +开发环境:Eclipse +Android SDK4.0.2+三星S3 +项目描述:布偶猫家以VR、AR技术研发与应用相结合的设计师女装品牌。公司专注于打造一个时尚个 +性服饰的网络购物社交平台,匹配完整且独立的线下柔性生产链,为消费者带来全新且独特的用户体验。 +功能模块:主界面显示、登录注册、侧滑界面、搜索界面、分类及详情、分享与用户晒宝贝的社交圈、 +个人职责:主界面的结构搭建,公共部分抽取,榜单排行的实现,侧滑界面,分类与详情 +技术要点: +1、整个界面使用Fragment进行布局,提取每个Fragment的头部以及底部的样式,并且在底 +部通过选中RadioGroup中的RadioButton来跳转到不同的界面 +2 +2、每个Fragment都可以通过侧滑跳转到相邻的Fragment +3、使用XUtils的BitmapUtils框架去异步请求网络图片 +4、使用Gson框架解析从服务器获得到的Json数据 +5、采用SwipeRefreshLayout实现下拉刷新功能 +6、在“榜单”所在的Fragment中通过三组RadioGroup来实现各种分类 +7、将用户收藏的信息保存在SQLite数据库中,通过“我的收藏”直接跳转到所对应的界面 +8、通过ShareSdk来实现各个平台的分享功能 +9、使用自定义的轮播图来显示电影中的各种海报 +10丶项目整体通过事件分发机制来避免滑动出现的BUG +项目名称:西行客 +开发周期:3个月 (3 人) +开发环境:Eclipse +Android SDK4.4.2+小米4 +项目描述:《西行客》 +功能模块:主界面显示、登录注册、精品路线规划、行程动态、评论界面、藏百科等 +个人职责:主界面的结构搭建,公共部分抽取,路线列表界面头部放大及毛玻璃效果,登陆注册 +技术要点: +1、主界面使用四个Fragment进行布局,底部通过选中RadioButton 来跳转到不Fragment, +商品详情页多TAB页的共用 +2 行程动态页面ListView使用分页加载 +3、精品路线页面使用三级缓存处理图片,WeakReference储存图片信息 +4、使用Gson框架解析从服务器获得到的Json数据 +5、路线列表头部使用JNI调用C实现高效率高斯模糊 +6、路线列表用StickyListView框架实现不同day在头部显示 +7、藏百科使用viewpagerindicator开源框架实现各个分类之间的跳转 +8、在overscrollby方法中添加阻尼系数和值动画,通过插值器实现详情页下拉刷新效果 +9、通过ShareSdk实现各个平台的分享功能 +10丶发起行程页面调用百度地图api定位用户当前位置 +项目名称:穷购物 +开发周期: 3个月 (4 人) +开发环境:Eclipse +Android SDK4.0+华为p6 +项目描述:《穷购物》集成了各大电商平台、团购、促销活动,并且提供了货到付款支付方式,让用户购 +物更加省心、付款更加安心。 +功能模块:主界面显示、支付功能、商品详情、购物车、搜索 +个人职责:主界面的显示、商品详情模块、购物车 +技术要点: 1、通过自定义控件实现首页的自动轮播图 +2、使用Lrucache处理较多图片资源 +3 +3、使用RecyclerView来显示各种各样的商品信息 +4、该app中的分享功能运用的ShareSdk完成,扫描二维码功能运用的是谷歌官方包Zxing +实现 +5、使用支付宝官网提供的alipay.jar包来实现在线支付功能 +自我评价 + 1.愿意加班,愿意对自己的工作负责; + 2.心思细腻,成熟稳重,长期沉积在公司; + 3.有较强的学习理解能力强; + 4.性格乐观张扬,表达能力与沟通能力优秀,快速融入公司大集体,团结同事快速解决难题; + 5. CSDN、泡在网上的日子、GitHub、APKbus这些是闲暇时消遣的好去处; + 6.爱好收集各种炫酷自定义控件,琢磨实现原理; +4 + + """ + # 自制简历3 + chk_str9 = """ + 姓名:周远 +男 | 26 岁 | 户籍 : 湖北襄阳 +工作年限:5年工作经验 +TEL: 18627000332 +E-mail: z244370114@outlook.com +教育背景 +武汉工业职业技术学院 计算机应用技术 +工作经历 +武汉得意生活有限公司(2015 年7月 – 2019 年3月) + 负责得意家与得意生活APP安卓端开发和版本迭代; + 得意家界面改版,部分新增功能开发和后期维护; + 得意生活项目重构,框架搭建 +群艺积分制(武汉)有限公司(2019 年3月 - 2020年2 月) + 负责MPM APP 客户端的框架搭建和主页模块的开发; + 负责群艺积分制APP客户端开发和版本迭代; +专业技能 +具备项目框架的搭建和重构的能力,熟悉开发流程; +熟练MVC,MVP,MVVM 架构,有一定的项目框架搭建能力,设计和需求分析能力; +熟悉Android 中的屏幕适配; +熟悉Handler异步消息处理机制,能够很好的处理多线程间通讯,避免ANR; +精通Android 的性能优化; +熟练自定义控件,View 的绘制原理和事件分发机制; +熟悉Android Sqlite数据库的相关操作,数据库的创建和对数据库进行增删改查的操作; +熟练Android 网络编程,OkHttp3,Retrofit,Xutils等主流网络框架的使用; +悉知Android 内存管理机制,避免OOM,使用 LeakCanary、MAT等工具检测内存泄露; +熟练使用主流开发框架,学习过Retrofit、Glide 等框架内部源码; +掌握主流第三方SDK集成,有第三方登陆、分享、支付、地图,推送,二维码等集成经验; +能够使用JNI进行Native/Java代码互调; +熟练使用H5 混合开发,能够进行JS/Java代码互调; +熟练 常用 单例模式,建造者模式,策略者模式 +熟练Android 5.0中的Material Design新特性,熟练使用RecyclerView,ListView等; +项目经历 +项目名称:得意家 +下载地址:http://d.7short.com/5tnr?release_id=5abdf580959d6917c011318f +项目描述:得意家集设计、施工、家居商品交易、线上互动分享为一体,依托互联网 家装的线上 +线下高品质平台,通过对装修环节的严密把控和施工节点汇报运作模式的严格执行,杜绝施工过 +程中一系列问题。 +其包含以下几个模块:1、主页模块,2、装修圈,3、值得买,4、攻略,5、我的 +整体框架: 1、项目复杂模块采用了MVP架构模式(2.5.0 之前采用的MVC); +2、整体项目界面使用ListView与RecyclerView完成; +3、攻略模块使用ViewPager+Fragment完成整体架构; +4、值得买加载H5 网页完成复杂界面的展示,并且实现和原生页面的完美交互; +5、使用Retrofit+RxJava做为服务器端和客户端数据请求和交互的框架; +6、使用PhotoView查看大图 +职责描述:参与项目V2.5.0版本整体架构的重构工作(从MVC-->到MVP),完成V2.5.0-v3.1.0 +项目迭代工作,部分新增页面的完成; +(1)、参与项目系统分析和框架重构, 承担部分功能实现,公用模块封装和抽取; +(2)、负责购物车功能;找邻居功能;值得买搜索功能;聊天功能;聊天内部分享功 +能;攻略模块功能; +(3)、负责第三方登录,支付,分享,友盟推送 SDK的集成; +(4)、项目网络接口请求使用了加密技术,使产品数据更加安全 +项目名称: 得意生活 +下载地址:http://d.7short.com/tbx9?release_id=5c0a47ff959d6910ed085eac +项目描述:得意生活网(deyi.com)是华中地区受用户高度喜爱的本地生活服务社区消费类门户 +网站,致力于提升用户的生活品质,打造本地生活服务圈。实时更新吃喝玩乐购集一体的内容分 +享,拥有得意生活,一手掌握本地大小事。 +职责描述: 负责得意生活APP版本v6.3.0 - v6.5.4的迭代,对项目整体进行了重构优化,增强 +了用户体验; +(1) 使用RecyclerView完成首页,意淘,凑热闹三大模块; +(2) 意淘界面美化,购物模块; +(3) 负责聊天界面功能实现,地图定位功能实现 +(4) 修复搜索后不能进入商品详情页等bug; +技术要点: 1、项目采用的MVP架构; +2、以FragmentTabHost+Fragment来进行搭建UI框架,点击底部的五个Tab 实现 +Fragment的切换; +3、使用Retrofit+RxJava+MVP做为服务器端和客户端数据请求和交互的框架; +4、网络图片的加载和三级缓存基于Glide框架,更少的内存开销,更快的加载速 +度,避免加载图片造成OOM; +5、项目中消息机制主要采用EventBus事件总线和接口回调; +6、集成了第三方分享,登录,支付,ZXing,二维码扫描等SDK; +项目名称: 群艺积分制 +项目描述 : 群艺积分制app 是一款商务办公软件,是个全新的企业管理学系统。通过群艺积分 +制app 你可创建多维度的积分报表,管理层可自定义奖扣分范围,以及轻松分析出员工的工作状 +态等。 +职责描述:负责群艺积分制项目的可行性分析,完成了整体架构的搭建,以及后期迭代工作; +1、实现登录功能模块; +2、实现考勤定位,国外Google地图定位; +技术要点 : +1、采用BottomNavigationView+Fragment 建整体框架; +2、网络框架基于Retrofit+RxJava+MVC进行封装; +3、实现应用多语言切换功能; +4、完成了首页使用WebView 浏览器加载H5 界面,JS与Java交互调用; +5、集成了高德地图SDK,实现考勤定位功能; + """ + # 自制简历4 + chk_str10 = """ + 个人简历 +肖雨 +联系电话:15623938019 +E-mail : 541660139@qq.com +求职意向:android开发工程师 +教育背景: +学 历 : 大专(2011.9-2014.6) 专 业:船舶信息工程 +年 龄 : 27 籍 贯 : 湖北 +职业技能: +良好的java基础,熟悉掌握面向对象思想 +熟练处理Android中的OOM、ANR异常 +熟悉使用分享、推送、及第三方支付等功能的 SDK +精通ListView,recyclerview的优化及异步任务加载网络数据 +熟练掌握UI设计、常用布局、动画特效 、选择器,样式和主题的使用 +熟练掌握SharedPreferences、File、网络存储这些数据存储方式,熟练使 +用XML、JSON等常用数据解析 +熟练使用 ViewPagerIndicator,Dagger2、Rxjava、Retrofit,PullToRefresh, +Picasso,OkHttp,Gson, ijkPlayer等框架,提高开发效率,实现快速开发 +熟练使用Android Studio/Eclipse/SVN/git等开发工具 +掌握Android平台上嵌入式数据库SQLite编程技术,熟悉数据库CRUD操作 +熟悉图片的缓存技术,并且能够对图片的优化进行相应的处理 +熟练掌握android 事件的分发机制,通过对事件分发机制的认知,能够处理开发中 +遇到的特殊需求 +熟悉 Android中XMPP等原理,并运用三方SDK +熟练使用常用的框架MVC, MVP开发模式 +具有良好的编码能力和代码规范,追求代码执行效率,有良好的逻辑思维能力和 +团队合作能力 +具有良好的英语功底,能独立阅读英文开发帮助文档 +工作经历: +公司名称:武汉汽泡游戏有限公司 +工作时间: 2016年9月—2017年8月 +职 位: android开发工程师 +公司名称:武汉点智科技有限 +工作时间: 2017年9月—2018年5月 +职 位: android开发工程师 +公司名称:武汉郎威达科技有限公司 +工作时间: 2018年5月—2019年11月 +职 位: android开发工程师 +Android 项目经验: +项目名称:汽泡游戏SDK +开发周期:2个月 +开发环境:android studio 2.3.1+Android SDK+三星 +项目描述:汽泡游戏 SDK 是面向所有移动游戏,整合了第三方登录,和支付,数 +据分析等功能 +功能模块:支付,数据收集和分析,登录注册等模块。 +技术要点: +1,提供接口给cp,使其接入,完成登录,支付等功能 +2. 将sdk项目打成aar包,让cp可以迅速集成 +3,编写接入文档,使cp接入简单 +项目名称:mad raffle +开发周期:6个月 +开发环境:android studio 2.3.1+Android SDK+三星 +项目描述:Mad Raffle是一个在线交易平台,为用户(玩家)提供机会,进入各种游 +戏机会,包括抽奖和其他忠诚奖励计划。该应用程序使用独特的算法随机选择各种抽 +奖和游戏的获奖者,为用户(玩家)提供赢得销售平台上提供的各种项目和服务的机 +会。 +功能模块:搜索,分类,订单,购物车,地址管理,活动,帮助中心,登录注册等模 +块。 +技术要点: +1,动态加载数据,上拉刷新,下拉加载 +2. 首界面通过ViewPager控件实现轮播图效果,PagerAdapter进行动态数据的 +添加. +3.ListView中通过给每一个Item添加动画.更好的提升用户体验. +4.品牌模块,通过ListView获取position,让Fragment动态的进行切换. +5.我的模块,通过给每一个item设置一个数据的动画随机时间,达到每一次切换随 +机动画波动效果. +6.购物车模块,基于Java当中的单例设计模式来搭建模块的框架.绑定用户的id与 +服务器交互. +7.项目当中对于一些功能,通过三方流行框架:ImageLoader,Zxing,等框架进行项 +目的敏捷开发. +8.该项目集成paypal payfast,等第三方支付,google的gcm来实现推送, +实现了facebook,twitter,google 等三方登录功能,通过android自带的 +分享完成了分享功能 +项目名称:游戏推 +开发周期:1个半月 +开发环境:Android Studio 2.3.3 +Android SDK+vivo +项目描述:游戏推是集合各个游戏,分发任务,通过完成任务获取奖励的应用。 +功能模块:首页,新游推荐,下载安装,搜索,提现,帮助中心,登录注册等模块。 +1.视图层框架搭建,界面统一,采用模板模式以及完成相应回调接口,处理业务逻辑, +提高代码重用性. +2. 采用h5原生混合开发,通过js交互,实现原生和h5的数据交换和事件响应 +操作. +3. 通过Rxjava、Retrofit框架访问网络数据,然后对json数据进行解析,实现数 +据交互. +4. 对项目中的多个H5页面进行深度优化,提高项目的整体性能. +5. 提供一个搜索功能,携带搜索关键字在后台数据库中获取出相关字段的所有商 +品. +6. 通过第三方Share SDK,实现分享功能. +7. 支付通过支付宝第三方SDK实现支付和提现功能. +8. 第三方登录功能,通过各个不同的第三方官方的接口来实现. +项目名称:体育项目系列(台球TV,足球TV 等等) +开发周期:2个月 +开发环境:Android Studio 2.3.3+Android SDK +项目描述:为客户提供优质的体育视频,咨询,论坛。 +功能模块:首页,新游推荐,下载安装,搜索,提现,帮助中心,登录注册等模块。 +1.采用 mvp 框架搭建该项目,集合 Rxjava、Retrofit 框架进行网络请求, +ijkplayer进行视频播放 +2.采用 recyclerview 搭建论坛页面,recyclerview 中 item 嵌套 recyclerview +实现楼中楼评论 +3.采用AndroidAutosize 框架对手机进行屏幕适配 +4. 提供一个搜索功能,携带搜索关键字在后台数据库中获取出相关字段的所有商 +品. +5. 通过第三方Share SDK,实现分享功能. +6. 支付通过支付宝第三方SDK实现支付和提现功能. +7. 第三方登录功能,通过各个不同的第三方官方的接口来实现. +项目名称:EastNovel +开发周期:1个月 +开发环境:Android Studio 3.1.2+Android SDK +项目描述:免费小说免费看。 +功能模块:首页发现,书架,分类,我的,登陆注册等模块。 +1. 采用mvparms框架搭建该项目,集合Rxjava、Retrofit框架进行网络请求, +Dagger2进行解耦,Rxlifecycle对activty 和fragment 进行生命周期的管 +理 +2.自定义控件对小说进行绘制 +3.应用内中英文切换 通过在activity attachBaseContext的回调中设置value中 +的国家语言来实现应用内中文字切换 +4. 提供一个搜索功能,携带搜索关键字在后台数据库中获取出相关字段的小说. +5.修改用户信息和头像,已适配Android 7.0相机不支持uri . +6. 接入google billing实现google 内购功能. +个人评价: +深知互联网行业工作强度大,能承受较大的工作强度和压力; +乐观向上,为人诚恳,拥有较强的团队协作精神,富余的工作热情和积极的工作 +态度,责任感强,敢于担当; +有较强的学习能力和适应能力,对新知识、新技术充满渴望, 钻研能力较强. +喜欢与人讨论分享技术,交流开发心得,学习对方开发优点,达到共赢. + + """ + # 自制简历5 + chk_str11 = """ + 基本信息 +姓名:王新星 意向岗位:安卓开发⼯程师 +年龄:29 期望薪资:10000~11000元/⽉ +邮箱:wangxinxing_ @ .com +联系电话:13657271406 +教育经历 +国防信息学院 2008.9-2013.6 信息系统管理 本科 +⼯作经历 +武汉壹件事教育⽂化有限公司 2017.3-2020.5 安卓开发⼯程师 +⼯作描述:负责app软著的申请,各⼤应⽤市场账号的申请及版本管理;基于android的应⽤程序的设计开发⼯作;负责参与公司现有 +app 的改进以及优化,负责项⽬后期的修改维护; +湖南威⻢逊科技有限公司 2015.8-2017.1 移动开发 +负责基于Android的应⽤程序的设计开发⼯作; 负责参与公司现有产品App的改进以及优化; 项⽬后期修改与维护; 每周五早 +上的晨会,介绍本周已完成的⼯作,下周将要完成的⼯作。 +项⽬经验 +爱⼼课堂3.0 2017.4-2018.6 安卓开发⼯程师 +项⽬描述:公司和学校⽼师合作开发了⼀套在线教学辅助系统,该系统帮助⽼师掌握学⽣学习情况,帮助学⽣掌握⾃⼰学习的薄弱环 +节,然后推送错题。之前已开发完成web版,后来需要开发移动端,所以开发这个产品。该产品分为两个版本维护,⼀个版本为该学校 +定制,⾄今仍在使⽤,另⼀个版本为公司的开放版本,未曾发布应⽤市场,只能在官⽹下载,⽬前暂未维护。该产品分为⽼师端和学⽣ +端。 1. ⽼师端:发布练习,学⽣答题之后,⽼师可以在线批阅,批阅完成之后可以查看报告。 2. 学⽣端:完成练习,拍照上传,⽼师批阅 +之后,学⽣收到批阅结果。错题本记录错题。 第三⽅框架的使 +⽤:bdvideoplayer,eventbus,butterknife,mpandroidchart,greendao,glide,bugly +批阅审核 2018.4-2019.10 安卓开发⼯程师 +项⽬描述:和秒会作业配套使⽤的app,我们希望帮助⽼师批阅学⽣的作业,然后开发的⼀套批阅任务分发程序。为公司内部使⽤,未 +发布到应⽤市场。 +秒会作业 2018.4-2019.10 安卓开发⼯程师 +项⽬描述:爱⼼课堂3.0是使⽤socket开发,数据传输使⽤的是flatbuff,存在性能瓶颈⽽且极难维护,所以开发了秒会作业这个新的 +app,并配套智能作业进⾏推⼴。该app发布到各⼤应⽤市场。⽬前已下架。 1. ⽼师端:⼩程序 2. 学⽣端,家⻓端合⼆为⼀:完成练 +习,拍照上传,⽼师批阅之后,学⽣收到批阅结果。错题本记录错题。 第三⽅框架的使⽤:okhttp,友盟推送,友盟统计,友盟分 +享,retrofit+okhttp,glide, mpandroidchart +学票 2015.8-2017.1 安卓开发⼯程师 +这是⼀款针为⼤学⽣做⾦融信贷⽽研发的app,项⽬⼀共分为四个主要模块:登录、⾸⻚、我的、更多。其中⾸⻚模块展⽰了近 +期的优惠活动、推荐的套餐及银泽通集团近期发⽣的重⼤事情,还包含了⽤⼾的实名认证、信⽤钱包、⼤额分期、快速还款、进 +度查询等功能。我的模块包含我的资料及⽤⼾资料的编辑及修改,我的账单、我的理财、我的积分、我的消息、提现及快速还款 +等功能。更多模块主要是给⽤⼾提供帮助中⼼,联系我们,查看app版本号及第三⽅的(例如:微信好友、朋友圈、qq好友、 +qq空间、新浪微博等)邀请分享功能。登录模块才有校园内外注册登录,提⽰帐号安全级别。使⽤xUtils . 框架完成联⽹操 +作、注解及⽹络图⽚的异步加载、图⽚缓存等,使⽤gson完成⽹络数据的解析,还使⽤了PullToRefresh-master框架完成刷新 +和加载动画。 +⾃我评价 +本⼈酷爱软件事业,⾃制⼒及学能⼒强。综合素质较好,能够吃苦耐劳,对各种环境适应能⼒强。敢于挑战⾃我,具备良好的品德, 乐 +于与⼈沟通。具有较强的团队合作能⼒。善于学习,勤奋刻苦,对负责的⼯作会付出全部的精⼒和热情,制定缜密的计划,⼒争在 最 +短时间内将⽬标达成,喜欢挑战,能在较短时间内适应⾼压⼒的⼯作。对于android开发,我有强烈的学习欲望及较强的学习能 ⼒,并 +愿意和团队分享⼯作和技术经验。;求知欲强,喜欢利⽤空闲时间看⼤神的博客及科技前沿的相关⽂章。 + + """ + # 自制简历6 + chk_str12 = """ + 黄古森 +6年工作经验|本科.统招|27岁|男 +联系电话:18771072415 +电子邮箱:18771072415@163.com +个人优势 +综合能力:执行力|抗压能力|沟通协调能力|适应能力|责任心 +乐于沟通,能把握沟通需求关键,并提供程序解决方案;专注,能针对性的问题进行研究以及深入掌握;掌握 +Android逆向技术,熟练掌握反编工具AndroidKiller的使用,能熟练的解包编包;掌握各大编译器使用 +Eclipse、AndroidStudio、IDEA等;能独立开发维护Android项目,熟练掌握各大模块的编写维护。 +工作经历 +武汉游侠精灵科技有限公司 2016.07-至今 +职位:android开发工程师 +负责公司整个手游运营平台的客户端部分,包括手游联运sdk、手游盒子APP、渠道分发SDK、渠道分包工 +具等。 +成都阅听科技有限公司 2014.06-2016.05 +职位:android开发工程师 +负责Android应用的开发,主要包括客户端框架搭建,解决技术问题,以及领导分配的开发任务。 +项目经历 +游戏舆情发送服务 2019.06-至今 +所属公司:(武汉游侠精灵科技有限公司) +项目描述: +获取游戏的聊天记录实时发送我方服务器 +你的成就: +●聊天记录的获取 +●TCP编码自定义协议 +●Netty实时发送消息 +●部署和调优 +手游渠道分发体系 2018.02-至今 +所属公司:(武汉游侠精灵科技有限公司) +项目描述: +包接入各大发行商的sdk,各大应用市场上架出包,各大硬核渠道上架,其他广告投放使用,分发融合工具 +你的成就: +完成整个项目的分发体系设计,代码编写,工具开发,上架维护更新等 +游侠游戏APP 2016.07-至今 +所属公司:(武汉游侠精灵科技有限公司) +项目描述: +游侠游戏平台运营APP,游戏下载渠道分发,运营活动,留存状态等 +你的成就: +全部开发设计与更新跌代维护! +联运游戏SDK 2016.07-至今 +所属公司:(武汉游侠精灵科技有限公司) +项目描述: +提供给手游厂商和渠道发行商联运的SDK +你的成就: +整体设计开发,更新迭代与维护 +发行手游GM管理后台 2017.10-2018.06 +所属公司:(武汉游侠精灵科技有限公司) +项目描述: +运营和合作商管理游戏玩家信息,禁言,数据统计等的管理后台 +你的成就: +数据统计分析,留存转化,功能定制,国际化语言! +手机写小说 2015.12-2016.03 +项目描述: +用手机写自己的小说,可随时随地创作小说。支持在线和离线阅读热门小说,支持导入本地小说阅读。 +你的成就: +整体框架的搭建,完成写书、书架、书城模块 +知晓 2015.07-2015.11 +项目描述: +新闻类app,知晓—知晓,知天下,晓大事。权威资讯平台,自己看新闻,打造你专属的精致生活1、根据你 +的生活方式,个性订阅精彩的生活资讯内容。 +你的成就: +整体框架的搭建,界面的绘制,使用SQLite数据库实现兴趣搜索功能 +教育经历 +湖北师范大学 本科.统招/电子信息工程 2010.09-2014.06 + + """ + # 自制简历7 + chk_str13 = """ + 简历 +个人资料 +姓 名: 陈亚雄 性 别: 男 +年 龄: 29 学 历: 本科 +毕业院校: 武汉纺织大学 工作年限: 6年 +E-mail: 50632775@qq.com 联系电话: 15902799433 +应聘方向 +求职行业: 计算机软件 +应聘职位: Android软件工程师 +发展意向: 长期,全职 +求职地点: 武汉 +期望薪资: 面议 +目前状况: 一周内可就职 +工作经历 +公司名称: 中软国际科技服务有限公司 +工作时间: 2016.08-2017.6 +公司性质: 民营公司 +责任部门: 安卓开发项目组 +工作描述: 1、负责Android开发工作,参与产品的设计实现测试和维护 +2、按照项目计划及时完成任务 +工作经历 +公司名称: 重庆车杰盟科技有限公司 +工作时间: 2017.07-2019.03 +公司性质: 民营公司 +责任部门: 安卓开发项目组 +工作描述: 1、负责开发基于Android平台的软件规划设计与开发及后期的维护 +2、负责Android平台上的技术攻关,确保开发质量 +工作经历 +公司名称: 武汉随链科技服务有限公司 +工作时间: 2019.04-2020.01 +公司性质: 民营公司 +1 +责任部门: 安卓开发项目组 +工作描述: 1、负责Android开发工作,参与产品的设计实现测试和维护 +2、按照项目计划及时完成任务 +专业技能 + 熟练掌握Android四大组件,熟练掌握UI设计、常用布局、动画特效 , 熟练掌握Android平 +台上嵌入式数据库SQLite编程技术 + 熟练掌握Android下的Handler异步线程机制 + 熟练掌握面向接口编程 + 掌握LruCache来处理安卓下图片的缓存 + 掌握ImageLoader,glide,gson,eventbus,Volley,OkHttp等第三方Android框架 + 掌握 事件分发机制,解决了许多同一页面滑动冲突问题 + 掌握MVC,MVP,MVVM开发模式 + 掌握JetPack中DataBinding的使用 + 熟悉java设计模式及六大设计原则 + 熟悉Android自定义控件 + 熟悉使用Android下语音识别、定位导航、消息推送以及分享内容至第三方平台 + 了解Rxjava,Retrofit,热修复等 +Android项目经验 +项目名称:LAEX交易平台 +项目描述:LAEX是一个数字资产交易所官方软件,大家在手机上,就可以实现数字货币交易和查询,非常方便。 +技术要点: +1. 使用最新的databing框架取代繁琐的findviewbyId操作 +2. 使用沉浸式状态栏,同时兼容各个版本 +3. 整个项目使用的MVP模式,提高代码的可读性 +4. 行情页面使用flyco的CommonTabLayout搭配viewpager实现切换功能 +项目名称:超级车赢家app +开发周期:3个月 +项目描述:超级车赢家app是一款专为汽车美容点提供的维修保养、车辆信息、消费记录等接单和管理app,让店主 +们可以快速获取维修订单,更好的为客户服务。 +技术要点: +2 +1.首页使用ScrollView进行嵌套。 +2.首页使用第三方控件MPAndroidChart实现饼状图柱状图 +3.使用LineGraphicView实现点状曲线图 +4.android与js进行交互 +5.使用zxing框架进行二维码扫描,使用wintone框架对车牌进行扫描 +6.车牌录入信息使用自定义键盘 +项目名称:小二开单 +开发周期:3个月 +项目描述:小二开单是一款针对销售一线的个人或团队建设以满足销售和微信职能为基础,将数据资源引入app,为用 +户创造智能型销售。 +技术要点: +1.使用微信登录,手机登录以及token登录3种形式。 +2.首页使用webView进行展示。 +3.自定义fastIndexBar进行同事搜索 +4.根据网址利用图像数据转换,使用矩阵转换生成二维码 +5.配合后台对接口,完成删除成员,添加成员等功能 +项目名称:卡侎养车 +开发周期:3个月 +项目描述:卡侎养车是一家拥有实体油品生产工厂,拥有专业的换油保养连锁店面,现打造B2C模式,给予车主性价 +比高的产品,质量好的服务。 +技术要点: +1.配置Android annotations框架进行便捷开发。 +2.每个页面都是一个自定义的ListView条目,上拉和下拉都可以刷新,使用PullToRefreshListView来实 +现。 +3.使用百度地图完成定位,绘制Marker标志点以及路线导航等功能。 +4.自定义一个ObservableScrollView可以监听onscroll事件的scrollView +5.利用广播实时监听订单状态的改变更新界面 +3 +项目名称:宁夏eshop +开发周期:3个月 +项目描述:宁夏eshop是一款网上办理移动话费业务的app,让客户在家就能轻松办理业务。 +技术要点: +1.首页使用的是第三方库MPAndroidChart框架。 +2.用第三方框架PullToRefreshListView实现数据加载,图片处理,下拉刷新和上拉加载。 +3.对PullToRefreshListView设置条目点击事件,跳转到集团详情界面,设置集团详情界面,包括字体 +调整,整体布局的实现。 +4.使用自定义控件EdiTableTextView,利用LinearLayout的addView去活动的添加EdiTableTextView。 +项目名称:好享购物 +开发周期:3个月 +开发环境:Androidstudio +项目描述:好享购物定位于新媒体购物,整合电视、互联网、型录、手机等无店铺虚拟通路,为顾客提供多元化的优质 +商品与服务。好享购物致力于成为全新品质生活理念与健康生活方式的引领者、传播者,做消费者的购物专家,将目标 +顾客定位为“有标准、具备消费力、关注生活质量的精明买家”。 +功能模块:搜索,分类,订单,购物车,地址管理,帮助中心,登录注册等模块。 +技术要点: +1. 轮播图功能的实现以及主界面各个模块入口的完成。 +2. 首页使用GridView进行热门商品的图片展示和文字描述 +3. 登录注册模块主要涉及UI的实现,联网的操作,数据的传递,服务端Servlet注册,登录逻辑的实现,对数据库 +进行的操作。 +4. 每个页面都是一个自定义的ListView条目,上拉和下拉都可以刷新,使用PullToRefreshListView来实现。 +5. 对于用户一些配置信息:比如用户名和密码,我们使用SharedPreference将这些信息保存起来 +6. 使用线程池管理下载任务,先去LruCache查看Image,没有再去手机缓存中查看,再没有则开启线程下载,列 +表在滑动的过程中取消下载任务,闲置状态下再去下载当前显示条目的图片。 +项目名称:新华炫闻 +开发周期:3个月 +开发环境:AndroidStudio +项目描述:新华炫闻是为用户打造的新闻类App,及时推送新闻资讯,用户可以根据个人喜好选择不同 +的新闻类型的新闻模块。 +技术要点: +1.新闻中心利用ViewPagerIndicator开源框架结合Fragement实现不同类型新闻的显示; +2.AysncTask异步框架获取数据显示新闻资讯信息,利用第三方框架完成下拉刷新和加载更多功能; +4 +3.ListView抽取,convertView复用和利用ViewHolder缓存优化程序; +4.ListView不同Item信息类型的过滤显示,防止复用过程中条目出错,不能正确显示; +5.网络获取图片按比例机型缩放; +6.我们使用WebView控件加载从服务器中获得的新闻数据,并对新闻详情进行展示; +7.采用ShareSDK可对新闻详情进行分享和集成极光推送功能。 +自我评价 +有不断学习的良好习惯,能承受高强度的工作压力热爱技术,喜欢钻研,有志于在手机平台方向 +. +长期发展,并能主动承担开发任务,承受工作压力对移动领域新技术有强烈的兴趣和独立解决问题的 +. +能力有较强的团队合作精神,积极主动,责任心强,能与团队成员进行有效地沟通,及时高效完成任 +. +务。 +5 + + """ + # 自制简历8 + chk_str14 = """ + 个人简历 +个人情况 +姓 名: 陈超峰 +目前所在: 洪山区 +户口所在: 湖北黄冈 +婚姻状况: 未婚 +民 族: 汉族 +身 高: 175 cm +体 重: 75kg +电 话: 15827578935 +求职意向 +应聘职位: android开发工程师 +求职类型: 全职 +到岗时间: 一周内 +希望工作地区: 武汉 +教育经历 +中南民族大学工商学院 本科 计算机科学与技术 2005.9-2009.6 +技能专长 +01.具备独立开发,能快速上手项目开发和项目迭代维护能力; +02.熟练掌握JAVA基础技能,熟练掌握面向对象思想,熟练掌握集合,IO流 +03.熟练掌握Android的常用布局,Android四大组件 +04.熟练掌握Android的设计样式、主题、布局的优化以及include的使用 +05.熟悉MVC架构模式。 +06.熟练掌握Android中的常见机制,比如说事件分发和拦截机制、Handler机制等等 +07.熟练使用常用开源框架,比如说Retrofit、Volley +08.熟练掌握Android中数据多级缓存的原理 +09.熟练处理OOM异常,以及Android内存的优化 +10.有一定的Android屏幕适配经验(可以使用多种方式对不同分辨率屏幕进行适配) +11.熟练掌握Android中Touch事件传递机制 +12.熟悉Android中的自定义控件技术 +13.熟悉常用设计模式(单例模式、工厂模式) +工作项目经历 +2020年02月 - 至今 android工程师 +项目:搜周边 +开发工具:AndroidStudio,安卓智能手机,Git +项目描述:搜周边是一款类似于饿了么的app。目前有三大模块: +【首页】:展示推荐的商家以及广告; +【社区互动】:定位社区并在已经登录的社区浏览,发表信息等; +【我的】:用户手机账号的设置功能(注册,登录,用户信息编辑,退出等), +项目职责: +1、根据软件设计规范,负责客户端设计、开发 +2019年02月 -2019年12月 android工程师 +项目:快音1.0和2.0的迭代版本 +开发工具:Android Studio,安卓智能手机,Git +项目描述:快音是一款类似于抖音的娱乐app。有四大模块: +【首页】:展示推荐视频以及附件视频以及关注,收藏,评论和分享; +【编辑视频】:编辑视频(采用第三方蓝松sdk将手机上的图片,语音,背景音乐合成视频) +【我的】:用户手机账号的设置功能(注册,登录,用户信息编辑,退出等),展示用户发送的 +视频列表..... +项目职责: +1、根据软件设计规范,负责客户端设计、开发; +2、对接web端的接口; +3、根据业务变化,不断改善升级产品,添加新的功能。 +技术要点: +1、采用第三方图片处理的sdk,对图片进行添加文字(文字随意拖动,放大缩小和改变颜色等), +表情等生成新的图片,然后进行缩放处理; +2、采用第三方库对每张图片录制语言(可以变音); +3、AsyncTask任务异步加载背景音乐; +4. 开源框架Volley + Glide+ PhoneView交互和加载图片,因为Glide的内置自动识别屏幕 +分辩率功能,从而能自动压缩图片,达到防止OOM异常; +5、集成ShareSDK实现商品链接分享,集成极光消息推送; +6、采用蓝松SDK将图片,图片对应的语言,背景音乐合成短视频; +7、采用七牛云sdk上传,下载视频; +2011年07月 -2019年1月 武汉思为同飞网络技术股份有限公司 android工程师 +项目:华数直播回看1.0和2.0的迭代版本 +开发工具:Android Studio,安卓智能手机,svn +项目描述:华数直播回看是一款用于播放华数直流视频的娱乐APP项目,项目有五个模块: +【协议界面】展示华数TV的协议内容,同意则进行注册登录验证 +【首页】展示各个频道的列表 +【播放页】控制播放相应的频道(屏幕的缩放等功能) +项目职责: +1、 参与项目的大部分功能实现; +2、 项目后期升级和维护; +3、 各个模块后期版本的重构。 +4、 各个版本在不同机顶盒或者一体机上的适配和移植(在TCL,MELE,熊猫,Sony,pptv,盘古, +egreat,海尔,MeleA20,MeleA31,LG1154,极米,杰科,亿典等机顶盒的适配和移植)。 +技术要点: +1、 项目整体采用B/S以及C/S混合结构开发 +2、 xml和json数据的获取与解析 +4、采用AsyncTask任务加载数据 +项目:华数TV1.0,2.0,3.0,4.0,5.0的迭代版本 +开发工具:elipse,androidSDK,ADT,android studio安卓智能手机,svn +项目描述:华数TV是一款用于播放华数网络视频的娱乐APP项目,有九个模块: +【协议界面】展示华数TV的协议内容,同意则进行注册登录验证; +【首页】展示华数TV首页; +【收藏】收藏用户指定华数TV的视频; +【历史】记录用户播放的华数TV视频; +【推荐】展示每日推荐的内容; +【列表页】展示各个类别的视频内容; +【详细页】展示用户即将播放的视频相关信息; +【播放页】控制播放用户指定的视频; +【统计】用于统计某个视频被观看的次数; +【多屏互动】华数TV的微信小程序中的推荐视频投放到机顶盒或者一体机上进行播放; +【升级】华数TV的app升级等; +项目职责: +1、 参与项目的大部分功能实现; +2、 项目后期升级和维护; +3、 各个模块后期版本的重构。 +4、 各个版本在不同机顶盒或者一体机上的适配和移植(在TCL,MELE,熊猫,Sony,pptv,盘古, +egreat,海尔,MeleA20,MeleA31,LG1154,极米,杰科,亿典等机顶盒的适配和移植)。 +技术要点: +1、 项目整体采用B/S以及C/S混合结构开发 +2、 xml和json数据的获取与解析 +3、 Gilde配合 PhotoView 实现图片缓存同时,也实现图片的放大缩小,防止OOM现象; +4、 封装BaseFragment和BaseActivity,提高代码复用性与维护性; +实现接口并调用第三方接口(手机设备aidl在华数TV3.0应用上进行投屏播放,微信投放图片 +等等) +2010年03月 -2011年06月 宁波畅翼信息科技有限公司/手机web开发工程师 +项目:手机中文实名网站 +开发工具:mBuilder,photoshop +项目描述:手机中文实名是一款基于手机中文实名搜索的平台。 +项目:宁波国土资源的机关信息、政策法规、财政信息、规划计划、土地管理、地质矿产、政务 +信息和政府信息公开,主要政府信息的发布 +开发工具:eclipse,tomcat,oracle +项目描述:宁波国土资源项目是一款用于采集,发布等关于宁波国土资源信息政府网站。 +技术要点: +1、 采用Struts2+Spring+hibernate框架 +2、 采用DIV/JS/CSS等技术 +2009年08月 -2010年02月 广州航天科技技工学校 数据库管理员 +内容简介:主要负责图书馆的图书借入管理 +自我评价 +热爱编程,喜欢钻研新的事物,是一个以兴趣为动力的人,良好的心理素质和抗压能力; +性格活跃,能够与同事融洽相处,积极向上,热情开朗; +做事认真耐心,能及时高质量完成工作; +独立性强,喜欢逛github上的开源库,学到新的技术点善于归纳总结。 + + """ + + fmt_txt(chk_str9)