2738 lines
151 KiB
Python
2738 lines
151 KiB
Python
#!/usr/bin/python
|
||
# coding:utf-8
|
||
from LAC import LAC
|
||
import re
|
||
import copy
|
||
import pytesseract
|
||
from PIL import Image
|
||
from utils import png2pdf, pdf_to_text
|
||
import pdfplumber
|
||
|
||
lac = LAC(mode='lac')
|
||
|
||
|
||
def getText_pdf(filename):
|
||
"""将pdf读成text"""
|
||
with pdfplumber.open(filename) as pdf_file:
|
||
content = ''
|
||
for i in range(len(pdf_file.pages)):
|
||
page_text = pdf_file.pages[i]
|
||
page_content = page_text.extract_text()
|
||
if page_content:
|
||
content = content + page_content + "\n"
|
||
return content
|
||
|
||
|
||
# 识别图片文字内容
|
||
def get_png_txt(filename):
|
||
# 读取图片
|
||
im = Image.open(filename)
|
||
# 识别文字,并指定语言
|
||
string = pytesseract.image_to_string(im, lang='chi_sim')
|
||
return string
|
||
|
||
|
||
def fmt_txt(chk_str):
|
||
true_chkStr = chk_str
|
||
regex = re.compile(r":\n*")
|
||
regex1 = re.compile(r":\n*")
|
||
true_chkStr = regex.sub(':', true_chkStr)
|
||
true_chkStr = regex1.sub(':', true_chkStr)
|
||
|
||
dict_chk = {
|
||
"interview_name": "",
|
||
"interview_type": 1,
|
||
"interview_sign": 0,
|
||
"hope_money": "",
|
||
"feedback": 0,
|
||
"interview_round": 0,
|
||
"name": "",
|
||
"phone": "",
|
||
"job_name": "",
|
||
"hr_name": "",
|
||
"work_exp": 0,
|
||
"interview_stage": 0,
|
||
"owner_name": 2,
|
||
"education": 1,
|
||
"work_undergo": [],
|
||
"project_undergo": [],
|
||
"work_list": [],
|
||
"school": "",
|
||
"at_school": "",
|
||
"specialty": "",
|
||
"specialty_do": [],
|
||
"mmended_state": 0,
|
||
"mail": "",
|
||
"account": "",
|
||
"id_card": "",
|
||
"gender": "",
|
||
"age": 0,
|
||
"gam": "",
|
||
"interview_state": 1,
|
||
"counts": 1,
|
||
"nation": "汉",
|
||
"review": "",
|
||
"upgrade": [],
|
||
"come_time": "",
|
||
"now_money": "",
|
||
"men_state": 1,
|
||
"teacher_state": 1,
|
||
"teacher_back": 1,
|
||
"offer_state": 1,
|
||
"offer_exam_state": 1,
|
||
"notice_state": 1,
|
||
"pass_why": 0,
|
||
"pass_text": "",
|
||
"file_url": '',
|
||
"now_address": '',
|
||
"birthday": '',
|
||
}
|
||
# 姓名
|
||
chk_name = r'[赵|钱|孙|李|周|吴|郑|王|冯|陈|褚|卫|蒋|沈|韩|杨|朱|秦|尤|许|何|吕|施|张|孔|曹|严|华|金|魏|陶|姜|戚|谢|邹|喻|柏|水|窦|章|云|苏|潘|葛|奚|范|彭|郎|鲁|韦|昌|马|苗|凤|花|方|俞|任|袁|柳|酆|鲍|史|唐|费|廉|岑|薛|雷|贺|倪|汤|滕|殷|罗|毕|郝|邬|安|常|乐|于|时|傅|皮|卞|齐|康|伍|余|元|卜|顾|孟|平|黄|和|穆|萧|尹|姚|邵|湛|汪|祁|毛|禹|狄|米|贝|明|臧|计|伏|成|戴|谈|宋|茅|庞|熊|纪|舒|屈|项|祝|董|梁|杜|阮|蓝|闵|席|季|麻|强|贾|路|娄|危|江|童|颜|郭|梅|盛|林|刁|锺|徐|邱|骆|高|夏|蔡|田|樊|胡|凌|霍|虞|万|支|柯|昝|管|卢|莫|经|房|裘|缪|干|解|应|宗|丁|宣|贲|邓|郁|单|杭|洪|包|诸|左|石|崔|吉|钮|龚|程|嵇|邢|滑|裴|陆|荣|翁|荀|羊|於|惠|甄|麴|家|封|芮|羿|储|靳|汲|邴|糜|松|井|段|富|巫|乌|焦|巴|弓|牧|隗|山|谷|车|侯|宓|蓬|全|郗|班|仰|秋|仲|伊|宫|宁|仇|栾|暴|甘|钭|历|戎|祖|武|符|刘|景|詹|束|龙|叶|幸|司|韶|郜|黎|溥|印|宿|白|怀|蒲|邰|从|鄂|索|咸|籍|卓|蔺|屠|蒙|池|乔|阳|郁|胥|能|苍|双|闻|莘|党|翟|谭|贡|劳|逄|姬|申|扶|堵|冉|宰|郦|雍|却|桑|桂|濮|牛|寿|通|边|扈|燕|冀|浦|尚|农|温|别|庄|晏|柴|瞿|充|慕|连|茹|习|宦|艾|鱼|容|向|古|易|慎|戈|廖|庾|终|暨|居|衡|步|都|耿|满|弘|匡|国|文|寇|广|禄|阙|东|欧|沃|利|蔚|越|夔|隆|师|巩|厍|聂|晁|勾|敖|融|冷|訾|辛|阚|那|简|饶|空|曾|毋|沙|乜|养|鞠|须|丰|巢|关|蒯|相|荆|红|游|竺|权|司马|上官|欧阳|夏侯|诸葛|闻人|东方|赫连|皇甫|尉迟|公羊|澹台|公冶宗政|濮阳|淳于|单于|太叔|申屠|公孙|仲孙|轩辕|令狐|钟离|宇文|长孙|慕容|司徒|司空|召|有|舜|岳|黄辰|寸|贰|皇|侨|彤|竭|端|赫|实|甫|集|象|翠|狂|辟|典|良|函|芒|苦|其|京|中|夕|乌孙|完颜|富察|费莫|蹇|称|诺|来|多|繁|戊|朴|回|毓|鉏|税|荤|靖|绪|愈|硕|牢|买|但|巧|枚|撒|泰|秘|亥|绍|以|壬|森|斋|释|奕|姒|朋|求|羽|用|占|真|穰|翦|闾|漆|贵|代|贯|旁|崇|栋|告|休|褒|谏|锐|皋|闳|在|歧|禾|示|是|委|钊|频|嬴|呼|大|威|昂|律|冒|保|系|抄|定|化|莱|校|么|抗|祢|綦|悟|宏|功|庚|务|敏|捷|拱|兆|丑|丙|畅|苟|随|类|卯|俟|友|答|乙|允|甲|留|尾|佼|玄|乘|裔|延|植|环|矫|赛|昔|侍|度|旷|遇|偶|前|由|咎|塞|敛|受|泷|袭|衅|叔|圣|御|夫|仆|镇|藩|邸|府|掌|首|员|焉|戏|可|智|尔|凭|悉|进|笃|厚|仁|业|肇|资|合|仍|九|衷|哀|刑|俎|仵|圭|夷|徭|蛮|汗|孛|乾|帖|罕|洛|淦|洋|邶|郸|郯|邗|邛|剑|虢|隋|蒿|茆|菅|苌|树|桐|锁|钟|机|盘|铎|斛|玉|线|针|箕|庹|绳|磨|蒉|瓮|弭|刀|疏|牵|浑|恽|势|世|仝|同|蚁|止|戢|睢|冼|种|涂|肖|己|泣|潜|卷|脱|谬|蹉|赧|浮|顿|说|次|错|念|夙|斯|完|丹|表|聊|源|姓|吾|寻|展|出|不|户|闭|才|无|书|学|愚|本|性|雪|霜|烟|寒|少|字|桥|板|斐|独|千|诗|嘉|扬|善|揭|祈|析|赤|紫|青|柔|刚|奇|拜|佛|陀|弥|阿|素|长|僧|隐|仙|隽|宇|祭|酒|淡|塔|琦|闪|始|星|南|天|接|波|碧|速|禚|腾|潮|镜|似|澄|潭|謇|纵|渠|奈|风|春|濯|沐|茂|英|兰|檀|藤|枝|检|生|折|登|驹|骑|貊|虎|肥|鹿|雀|野|禽|飞|节|宜|鲜|粟|栗|豆|帛|官|布|衣|藏|宝|钞|银|门|盈|庆|喜|及|普|建|营|巨|望|希|道|载|声|漫|犁|力|贸|勤|革|改|兴|亓|睦|修|信|闽|北|守|坚|勇|汉|练|尉|士|旅|五|令|将|旗|军|行|奉|敬|恭|仪|母|堂|丘|义|礼|慈|孝|理|伦|卿|问|永|辉|位|让|尧|依|犹|介|承|市|所|苑|杞|剧|第|零|谌|招|续|达|忻|六|鄞|战|迟|候|宛|励|粘|萨|邝|覃|辜|初|楼|城|区|局|台|原|考|妫|纳|泉|老|清|德|卑|过|麦|曲|竹|百|福|言|第五|佟|爱|年|笪|谯|哈|墨|连|南宫|赏|伯|佴|佘|牟|商|西门|东门|左丘|梁丘|琴|后|况|亢|缑|帅|微生|羊舌|海|归|呼延|南门|东郭|百里|钦|鄢|汝|法|闫|楚|晋|谷梁|宰父|夹谷|拓跋|壤驷|乐正|漆雕|公西|巫马|端木|颛孙|子车|督|仉|司寇|亓官|三小|鲜于|锺离|盖|逯|库|郏|逢|阴|薄|厉|稽|闾丘|公良|段干|开|光|操|瑞|眭|泥|运|摩|伟|铁|迮][\u4e00-\u9fa5]{1,2}'
|
||
name = re.findall(chk_name, true_chkStr, re.M)
|
||
if name:
|
||
name_txt = ','.join(name)
|
||
rank_result = lac.run(name_txt)
|
||
for index, i in enumerate(rank_result[1]):
|
||
if i == 'PER':
|
||
dict_chk['name'] = rank_result[0][index]
|
||
break
|
||
|
||
# 性别
|
||
gender = re.findall(r'男|女', true_chkStr, re.M)
|
||
if gender:
|
||
dict_chk['gender'] = gender[0]
|
||
|
||
# 电话
|
||
phone = re.findall(r"(?<=\D)1\d{10}", true_chkStr, re.M)
|
||
if phone:
|
||
dict_chk['phone'] = phone[0]
|
||
|
||
# 邮箱
|
||
email = re.findall(r'[0-9a-zA-Z.]+@[0-9a-zA-Z.]+?com', true_chkStr, re.M)
|
||
if email:
|
||
dict_chk['mail'] = email[0]
|
||
else:
|
||
email1 = re.findall(r'<[a-zA-Z]+\s[a-zA-Z]+>\s[0-9a-zA-Z.]+@[0-9a-zA-Z.]+?org', true_chkStr, re.M) # mail
|
||
if email1:
|
||
dict_chk['mail'] = email1[0]
|
||
|
||
# 应聘职位
|
||
job = re.findall(r'职位.*?\n', true_chkStr, re.M)
|
||
if job:
|
||
job_str = job[0]
|
||
if '/' in job_str:
|
||
job_list = job_str.split('/')
|
||
job_str = job_list[0]
|
||
job_name = job_str.split(':')[-1]
|
||
job_name = job_name.replace('\n', '')
|
||
job_name.strip()
|
||
dict_chk['job_name'] = job_name
|
||
|
||
# 学历
|
||
education_list = ['大专', '本科', '博士', '硕士']
|
||
for education in education_list:
|
||
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 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('|')
|
||
else:
|
||
work_exp_list = work_exp_str.split(' ')
|
||
for i in work_exp_list:
|
||
if '工作经验' in i:
|
||
true_work_exp_str = i.strip().replace('?', '')
|
||
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:
|
||
for i in work_exp_str.split(':'):
|
||
if i.strip()[0].isdigit():
|
||
work_exp = i.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
|
||
|
||
# 毕业学校, 专业, 毕业时间, 学历
|
||
school = re.findall(r'.*?学院.*?\n', true_chkStr, re.M)
|
||
school_list = []
|
||
if school:
|
||
school_str = school[0].replace('\n', '').strip()
|
||
if ' ' in school_str and ':' not in school_str:
|
||
school_list = school_str.split(' ')
|
||
else:
|
||
if ':' in school_str:
|
||
school_list1 = school_str.split(':')
|
||
for index, i in enumerate(school_list1):
|
||
if i.endswith('院校'):
|
||
school_list = [school_list1[index + 1], school_list1[index + 1]]
|
||
if not school_list:
|
||
school_list = [i.strip('学历').strip() for i in school_list1 if '大学' in i or '学院' in i]
|
||
else:
|
||
school_list = [school_str]
|
||
else:
|
||
school = re.findall(r'.*?大学.*?\n', true_chkStr, re.M)
|
||
if school:
|
||
school_str = school[0].replace('\n', '').strip()
|
||
if ':' in school_str:
|
||
school_list = school_str.split(':')
|
||
else:
|
||
school_list = [school_str]
|
||
else:
|
||
school_list = []
|
||
|
||
if len(school_list) <= 1:
|
||
new_chk_str = true_chkStr.split('教育经历')[-1]
|
||
if new_chk_str and '教育经历' in true_chkStr:
|
||
bold = re.compile(r'\n')
|
||
true_chk = bold.sub(' ', new_chk_str, count=3)
|
||
n_true = 1
|
||
if '\n' not in true_chk:
|
||
n_true = 0
|
||
if n_true:
|
||
school_chk_list = re.findall(r'.*?学院.*?\n', true_chk, re.M)
|
||
if not school_chk_list:
|
||
school_chk_list = re.findall(r'.*?大学.*?\n', true_chk, re.M)
|
||
else:
|
||
school_chk_list = [true_chk]
|
||
school_str1 = school_chk_list[0].replace('\n', '')
|
||
school_list = [i for i in school_str1.split(' ') if i != '']
|
||
|
||
if school_list:
|
||
time_index = -1
|
||
for index, i in enumerate(school_list):
|
||
chk_i = i.strip()
|
||
if chk_i in ['/', '|']:
|
||
continue
|
||
if time_index != -1 and index <= time_index:
|
||
continue
|
||
if '学院' in chk_i or '大学' in chk_i:
|
||
dict_chk['school'] = chk_i.strip().replace('?', '')
|
||
continue
|
||
if chk_i.replace('?', '').strip() in education_list:
|
||
dict_chk['education'] = chk_i.replace('?', '').strip()
|
||
continue
|
||
# 包含数字
|
||
if bool(re.search(r'\d', chk_i)):
|
||
if '-' in chk_i:
|
||
dict_chk['at_school'] = chk_i
|
||
time_index = index
|
||
continue
|
||
if '年' in chk_i:
|
||
continue
|
||
time_index = index + 2
|
||
dict_chk['at_school'] = (school_list[index] + school_list[index + 1] + school_list[index + 2]).replace(
|
||
'.', '/')
|
||
continue
|
||
if chk_i and '☆' not in chk_i:
|
||
dict_chk['specialty'] = chk_i.replace('?', '').strip()
|
||
continue
|
||
else:
|
||
dict_chk.update({
|
||
'school': '',
|
||
'graduate_time': '',
|
||
'at_school': '',
|
||
'specialty': '',
|
||
})
|
||
if dict_chk.get('at_school', ''):
|
||
dict_chk['graduate_time'] = dict_chk['at_school'].split('-')[-1].strip()
|
||
|
||
# 期望薪资
|
||
hope_money = re.findall(r'.*?薪资.*?\n', true_chkStr, re.M)
|
||
if hope_money:
|
||
hope_list = hope_money[0].split('薪资:')
|
||
dict_chk['hope_money'] = hope_list[-1].replace('\n', '').strip()
|
||
else:
|
||
dict_chk['hope_money'] = ''
|
||
|
||
# 身份证号r"[1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]"
|
||
# ^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
|
||
# ^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
|
||
id_card = re.findall(
|
||
r"[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]", true_chkStr,
|
||
re.M)
|
||
if id_card:
|
||
dict_chk['id_card'] = id_card[0]
|
||
else:
|
||
dict_chk['hope_money'] = ''
|
||
|
||
# 所在地
|
||
account = re.findall(r'.*?地:.*?\n', true_chkStr, re.M)
|
||
if account:
|
||
account_str = account[0]
|
||
if '|' in account_str:
|
||
account_list = account_str.split('|')
|
||
dict_chk['account'] = account_list[0].split(':')[-1].strip('\n')
|
||
dict_chk['accounts'] = account_list[1].split(':')[-1].strip('\n')
|
||
else:
|
||
dict_chk['account'] = account_str.split(':')[-1].strip('\n')
|
||
dict_chk['accounts'] = ''
|
||
else:
|
||
dict_chk.update({
|
||
'account': '',
|
||
'accounts': ''
|
||
})
|
||
|
||
# 年龄
|
||
age = re.findall(r'.*?龄:.*?\n', true_chkStr, re.M)
|
||
if age:
|
||
age_str = age[0].replace(' ', '').replace('\n', '')
|
||
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)))
|
||
age = dict_chk['age']
|
||
if age >= 100:
|
||
from builtins import str
|
||
dict_chk['age'] = int(str(age)[0:2])
|
||
else:
|
||
age1 = re.findall(r'[0-9]{2}.*?岁', true_chkStr, re.M)
|
||
if age1:
|
||
age1_s = age1[0].replace(' ', '')
|
||
dict_chk['age'] = int(age1_s.split('岁')[0])
|
||
else:
|
||
dict_chk['age'] = 20
|
||
|
||
# 民族
|
||
nation = re.findall(r'.*?族:.*?\n', true_chkStr, re.M)
|
||
if nation:
|
||
nation_str = nation[0].replace(' ', '').replace('\n', '')
|
||
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'] = '汉'
|
||
true_chkStr = true_chkStr.replace('------', '-').replace('----', '-').replace('-------', '-').replace('--', '-')
|
||
if '工作经历' not in true_chkStr and '⼯作经历' not in true_chkStr:
|
||
# if '实习经历' in true_chkStr:
|
||
# work_undergo_str = true_chkStr.split('实习经历')[-1]
|
||
# else:
|
||
work_undergo_str = true_chkStr.split('工作经验')[-1]
|
||
else:
|
||
if '⼯作经历' in true_chkStr:
|
||
work_undergo_str = true_chkStr.split('⼯作经历')[-1]
|
||
else:
|
||
work_undergo_str = true_chkStr.split('工作经历')[-1]
|
||
if work_undergo_str.startswith(':'):
|
||
work_undergo_str = work_undergo_str.split(':', 1)[1]
|
||
work_undergo_str1 = work_undergo_str.split('教育经历')[0]
|
||
work_str2 = work_undergo_str1.strip().strip('\n')
|
||
project_undergo = ''
|
||
if '项目经历' in work_str2:
|
||
project_undergo = 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('项目名称')[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]
|
||
elif '项⽬经验' in work_str2:
|
||
project_undergo = ''.join(i for i in work_str2.split('项⽬经验')[1:])
|
||
work_str2 = work_str2.split('项⽬经验')[0]
|
||
elif '项目经历' in true_chkStr:
|
||
project_undergo = true_chkStr.split('项目经历')[-1].split('自我评价')[0]
|
||
|
||
project_undergo2 = project_undergo.strip().strip('\n')
|
||
str_2 = re.split('([0-9]{4}[/|.][0-9]{1,2})', work_str2)
|
||
if len(str_2) <= 1:
|
||
work_str2 = work_str2.replace(' 年', '/').replace('年', '/').replace('月', '').replace(' 月', '')
|
||
# find_str2_list = re.findall('[0-9]{4}年[0-9]{1,2} 月', work_str2)
|
||
# for i in find_str2_list:
|
||
# new_i_list = i.split('年')
|
||
# new_str = new_i_list[0] + ' 年' + new_i_list[1].replace(' ', '')
|
||
# work_str2 = work_str2.replace(i, new_str)
|
||
str_2 = re.split('([0-9]{4}[/|.][0-9]{1,2})', work_str2)
|
||
project_undergo2 = project_undergo2.replace('年', '/').replace('月', '')
|
||
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:
|
||
# 数字开头
|
||
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
|
||
chk_i = i.strip()
|
||
if chk_i in ['-', '–', '―', '—']:
|
||
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 chk_i not in ['-', '–', '―', '—'] and ('-' in chk_i or '–' in chk_i or '―' in chk_i or '—' in chk_i):
|
||
index2 = index
|
||
new_str = project_list[index - 1] + chk_i
|
||
new_str_list1.append(new_str)
|
||
continue
|
||
if new_str_list1:
|
||
if '项目:' in new_str_list1[0]:
|
||
for project_str in new_str_list1:
|
||
dict_project = {
|
||
'name': '',
|
||
'time': '',
|
||
'comment': '',
|
||
'work': '',
|
||
'duty': '',
|
||
}
|
||
time_str = ''
|
||
company_name1 = ''
|
||
job_name = ''
|
||
chk_project_list = project_str.split('\n')
|
||
chk_key = ''
|
||
for index, str_project in enumerate(chk_project_list):
|
||
# 解析时间以及工作经历
|
||
if index == 0:
|
||
time_name_list = str_project.split(' ')
|
||
time_str = time_name_list[0] + time_name_list[1]
|
||
for project_str1 in time_name_list[2:]:
|
||
if '公司' in project_str1:
|
||
company_name1 = project_str1
|
||
if '/' in company_name1:
|
||
new_chk_company = company_name1.split('/')
|
||
company_name1 = new_chk_company[0]
|
||
job_name = new_chk_company[1]
|
||
continue
|
||
job_name = project_str1
|
||
continue
|
||
if '项目:' in str_project:
|
||
dict_project['name'] = str_project.split(':')[-1]
|
||
continue
|
||
if '开发环境' in str_project or '开发工具' in str_project or '开发技术' in str_project:
|
||
dict_project['duty'] += re.split('[:|:]', str_project)[-1]
|
||
chk_key = 'duty'
|
||
continue
|
||
if '项目描述' in str_project or '功能介绍' in str_project:
|
||
dict_project['comment'] += re.split('[:|:]', str_project)[-1]
|
||
chk_key = 'comment'
|
||
continue
|
||
if '职责' in str_project or '负责' in str_project:
|
||
dict_project['duty'] += re.split('[:|:]', str_project)[-1]
|
||
chk_key = 'duty'
|
||
continue
|
||
if chk_key:
|
||
dict_project[chk_key] += str_project
|
||
continue
|
||
dict_project['time'] = time_str
|
||
dict_project['work'] = job_name
|
||
project_undergo_list.append(dict_project)
|
||
# 存在工作公司经历:
|
||
if company_name1:
|
||
work_dict = {
|
||
'company_name': company_name1,
|
||
'time': time_str,
|
||
'position_name': job_name,
|
||
'duty': dict_project['duty'],
|
||
}
|
||
work_list.append(work_dict)
|
||
else:
|
||
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('.', '/')
|
||
name_str = project_name_time_str2[index + 3].strip()
|
||
if ' ' in name_str:
|
||
name = name_str.split(' ')[0]
|
||
else:
|
||
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['duty'] += 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['duty'] += 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:
|
||
dict_project1['comment'] += 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 or '模块' 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)
|
||
if ':' in project_str_list[0]:
|
||
dict_project1['name'] = project_str_list[0].split(':')[-1].strip()
|
||
else:
|
||
dict_project1['name'] = project_str_list[0].split(':')[-1].strip()
|
||
chk_key = ''
|
||
for i in project_str_list[1:]:
|
||
if not i or i.isdigit():
|
||
continue
|
||
if ':' not in i and ':' not in i and chk_key:
|
||
dict_project1[chk_key] += i
|
||
continue
|
||
if '开发周期' in i and (':' in i or ':' in i):
|
||
if ':' in i:
|
||
dict_project1['time'] = i.split(':')[-1]
|
||
else:
|
||
dict_project1['time'] = i.split(':')[-1]
|
||
continue
|
||
if ('开发环境' in i or '项目描述' in i) and (':' in i or ':' in i):
|
||
if ':' in i:
|
||
dict_project1['comment'] += i.split(':')[-1]
|
||
else:
|
||
dict_project1['comment'] += i.split(':')[-1]
|
||
chk_key = 'comment'
|
||
continue
|
||
if ('模块' in i or '框架' in i or '技术要点' in i or '职责' in i) and (':' in i or ':' in i):
|
||
if ':' in i:
|
||
dict_project1['duty'] = i.split(':')[-1]
|
||
else:
|
||
dict_project1['duty'] = i.split(':')[-1]
|
||
chk_key = 'duty'
|
||
continue
|
||
project_undergo_list.append(dict_project1)
|
||
else:
|
||
if re.findall('([0-9]{4}[/|.][0-9]{1,2})', project_undergo2):
|
||
index2 = -1
|
||
name2 = ''
|
||
new_str_list1 = []
|
||
if '-至今' in project_undergo2:
|
||
for index, i in enumerate(project_list):
|
||
if index <= index2:
|
||
continue
|
||
if not i:
|
||
continue
|
||
if i.strip().startswith('-'):
|
||
if i.strip() == '-':
|
||
index2 = index + 2
|
||
name3 = project_list[index + 2].split('\n')[-1]
|
||
if not name2:
|
||
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:
|
||
new_str = name2 + project_list[index - 1] + i + project_list[index + 1] + \
|
||
project_list[index + 2]
|
||
name2 = name3
|
||
new_str_list1.append(new_str)
|
||
else:
|
||
name3 = i.split('\n')[-1]
|
||
if not name2:
|
||
index2 = index
|
||
new_str = project_list[index - 2] + project_list[index - 1] + i.split(name3)[0]
|
||
name2 = name3
|
||
else:
|
||
new_str = name2 + project_list[index - 1] + i.split(name3)[0]
|
||
name2 = name3
|
||
new_str_list1.append(new_str)
|
||
else:
|
||
for index, i in enumerate(project_list):
|
||
if index <= index2:
|
||
continue
|
||
if not i:
|
||
continue
|
||
if i.strip() 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 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]
|
||
if (index - 1) >= len(str_2):
|
||
new_str = str_2[index - 2] + i.split(name3)[0]
|
||
else:
|
||
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:
|
||
if index + 2 >= len(project_name_time_str2):
|
||
dict_project['time'] = (
|
||
p_str + project_name_time_str2[index + 1]).replace('.', '/')
|
||
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]
|
||
if index + 3 <= len(project_name_time_str2):
|
||
dict_project['work'] = 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]) <= 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['comment'] += re.split('[:|:]', p_str_true)[-1]
|
||
continue
|
||
if '项目描述' in p_str_true or '功能介绍' 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:
|
||
dict_project = {
|
||
'name': '',
|
||
'time': '',
|
||
'comment': '',
|
||
'work': '',
|
||
'duty': '',
|
||
}
|
||
for project_str_i in project_list[1:]:
|
||
if project_str_i:
|
||
project_str_list = project_str_i.split('\n')
|
||
if project_str_list:
|
||
dict_project1 = copy.deepcopy(dict_project)
|
||
if ':' in project_str_list[0]:
|
||
dict_project1['name'] = project_str_list[0].split(':')[-1].strip()
|
||
else:
|
||
dict_project1['name'] = project_str_list[0].split(':')[-1].strip()
|
||
chk_key = ''
|
||
for i in project_str_list[1:]:
|
||
if not i or i.isdigit():
|
||
continue
|
||
if ':' not in i and ':' not in i and chk_key:
|
||
dict_project1[chk_key] += i
|
||
continue
|
||
if '开发周期' in i and (':' in i or ':' in i):
|
||
if ':' in i:
|
||
dict_project1['time'] = i.split(':')[-1]
|
||
else:
|
||
dict_project1['time'] = i.split(':')[-1]
|
||
continue
|
||
if ('开发环境' in i or '项目描述' in i) and (':' in i or ':' in i):
|
||
if ':' in i:
|
||
dict_project1['comment'] += i.split(':')[-1]
|
||
else:
|
||
dict_project1['comment'] += i.split(':')[-1]
|
||
chk_key = 'comment'
|
||
continue
|
||
if ('模块' in i or '框架' in i or '技术要点' in i or '职责' in i) and (':' in i or ':' in i):
|
||
if ':' in i:
|
||
dict_project1['duty'] = i.split(':')[-1]
|
||
else:
|
||
dict_project1['duty'] = i.split(':')[-1]
|
||
chk_key = 'duty'
|
||
continue
|
||
project_undergo_list.append(dict_project1)
|
||
dict_chk['project_undergo'] = [i for i in project_undergo_list if
|
||
i != {'name': '', 'time': '', 'comment': '', 'work': '', 'duty': ''}]
|
||
|
||
# 数字开头
|
||
if work_str2.startswith(':'):
|
||
work_str2 = work_str2.split(':', 1)[1]
|
||
work_str2 = work_str2.replace('------', '-').replace('----', '-').replace('-------', '-')
|
||
if work_str2[0].isdigit():
|
||
index1 = -1
|
||
new_str_list = []
|
||
for index, i in enumerate(str_2):
|
||
if index <= index1:
|
||
continue
|
||
if not i:
|
||
continue
|
||
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() not in ['-', '–', '―', '—'] and ('-' in i or '–' in i or '―' in i or '—' in i):
|
||
index1 = index
|
||
new_str = str_2[index - 1] + i
|
||
new_str_list.append(new_str)
|
||
continue
|
||
if new_str_list:
|
||
dict_chk['work_undergo'] = new_str_list
|
||
for work_str in new_str_list:
|
||
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]
|
||
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 = {
|
||
'company_name': '',
|
||
'time': '',
|
||
'position_name': '',
|
||
'duty': '',
|
||
}
|
||
new_str_list = work_str.split('\n')
|
||
new_str_list = [i for i in new_str_list if i != '']
|
||
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 not work_dict['company_name'] and new_str_list:
|
||
for i in new_str_list:
|
||
if i[0].isdigit():
|
||
work_dict['time'] = i.split(' ')[0].replace('.', '/')
|
||
work_dict['company_name'] = i.split(' ')[-1]
|
||
continue
|
||
work_dict['duty'] += i
|
||
if work_dict['company_name']:
|
||
work_list.append(work_dict)
|
||
# 公司名开头
|
||
else:
|
||
index1 = -1
|
||
name = ''
|
||
new_str_list = []
|
||
for index, i in enumerate(str_2):
|
||
if index <= index1:
|
||
continue
|
||
if not i:
|
||
continue
|
||
if i.strip() in ['-', '–', '―', '—']:
|
||
index1 = index + 2
|
||
if not name:
|
||
name1 = str_2[index + 2].strip().strip('\n').split('\n')[-1]
|
||
if str_2[index + 2].strip().endswith(':') or str_2[index + 2].strip().endswith(':'):
|
||
name1 = str_2[index + 2].split('\n')[-2]
|
||
if not name1:
|
||
name1 = str_2[index + 2].split(' ')[0]
|
||
new_str = str_2[index - 2] + str_2[index - 1] + i + str_2[index + 1] + \
|
||
str_2[index + 2].split(name1)[0]
|
||
name = name1
|
||
else:
|
||
name1 = str_2[index + 2].strip().strip('\n').split('\n')[-1]
|
||
if str_2[index + 2].strip().endswith(':') or str_2[index + 2].strip().endswith(':'):
|
||
name1 = str_2[index + 2].split('\n')[-2]
|
||
if name1 and '公司' in name1:
|
||
new_str = name + str_2[index - 1] + i + str_2[index + 1] + str_2[index + 2].split(name1)[0]
|
||
else:
|
||
new_str = name + str_2[index - 1] + i + str_2[index + 1] + str_2[index + 2]
|
||
name = name1
|
||
new_str_list.append(new_str)
|
||
continue
|
||
if i.strip() not in ['-', '–', '―', '—'] and ('-' in i or '–' in i or '―' in i or '—' in i):
|
||
index1 = index
|
||
if not name:
|
||
name1 = i.split('\n')[-1]
|
||
new_str = str_2[index - 2] + str_2[index - 1] + i.split(name1)[0]
|
||
name = name1
|
||
else:
|
||
name1 = i.split('\n')[-1]
|
||
new_str = str_2[index - 2] + str_2[index - 1] + i.split(name1)[0]
|
||
name = name1
|
||
new_str_list.append(new_str)
|
||
continue
|
||
if new_str_list:
|
||
dict_chk['work_undergo'] = new_str_list
|
||
for work_str in new_str_list:
|
||
new_str_list1 = work_str.strip(':').strip().split('\n')
|
||
work_dict = {
|
||
'company_name': '',
|
||
'time': '',
|
||
'position_name': '',
|
||
'duty': '',
|
||
}
|
||
if '(' in new_str_list1[0]:
|
||
new_str_list2 = new_str_list1[0].split('(', 1)
|
||
else:
|
||
new_str_list2 = new_str_list1[0].split(' ', 1)
|
||
company_name_str = new_str_list2[0]
|
||
if ':' in company_name_str or ':' in company_name_str:
|
||
if ':' in company_name_str:
|
||
company_name_str = company_name_str.split(':')[-1]
|
||
if ':' in company_name_str:
|
||
company_name_str = company_name_str.split(':')[-1]
|
||
if company_name_str.strip() == '':
|
||
company_name_str = new_str_list2[1]
|
||
date_time_list = re.findall('[0-9]{4}[/|.][0-9]{1,2}', company_name_str)
|
||
if len(date_time_list) >= 2:
|
||
work_dict['company_name'] = company_name_str.split(date_time_list[0])[0]
|
||
work_dict['time'] = date_time_list[0] + '-' + date_time_list[1]
|
||
else:
|
||
work_dict['company_name'] = company_name_str
|
||
if len(new_str_list2) > 1:
|
||
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()
|
||
elif ')' in new_str_list2[1]:
|
||
date_list = re.findall('[0-9]{4}[/|.][0-9]{1,2}', new_str_list2[1])
|
||
work_dict['time'] = date_list[0] + '-' + date_list[1]
|
||
else:
|
||
work_dict['time'] = new_str_list2[1].replace('.', '/').strip()
|
||
if work_dict['time'] == work_dict['company_name']:
|
||
work_dict['time'] = new_str_list1[1].split(':')[-1].replace('.', '/').strip()
|
||
if ' ' in work_dict['time']:
|
||
chk_time_str = work_dict['time']
|
||
work_dict['time'] = chk_time_str.split(' ')[0]
|
||
work_dict['position_name'] = chk_time_str.split(' ')[-1]
|
||
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'].replace('.', '/').strip() == work_dict['time']:
|
||
work_dict['position_name'] = ''
|
||
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
|
||
if '负责' in new_str_list1[1]:
|
||
duty1 = new_str_list1[1].split('负责')[-1]
|
||
duty = duty1.join((x for x in new_str_list1[2:]))
|
||
work_dict['duty'] = duty
|
||
else:
|
||
if '工作描述' in work_str and '专业技能' in work_str:
|
||
work_dict['duty'] = work_str.split('工作描述')[-1].split('专业技能')[0]
|
||
# work_dict['duty'] = work_str.split('工作描述')[-1].split('专业技能')[-1]
|
||
else:
|
||
for i in new_str_list1:
|
||
if '时间' in i:
|
||
work_dict['time'] = i.split(':')[-1].strip()
|
||
continue
|
||
if '职 位' in i:
|
||
work_dict['position_name'] = i.split(':')[-1].strip()
|
||
continue
|
||
work_list.append(work_dict)
|
||
dict_chk['work_list'] = work_list
|
||
review = ''
|
||
upgrade = true_chkStr.split('教育经历')[-1]
|
||
if '自我评价' in upgrade or '自我描述' in upgrade or '⾃我评价' in upgrade:
|
||
if '自我评价' in upgrade:
|
||
review = upgrade.split('自我评价')[-1].split('技能特长')[0]
|
||
elif '自我描述' in upgrade:
|
||
review = upgrade.split('自我描述')[-1].split('技能特长')[0]
|
||
elif '⾃我评价' in upgrade:
|
||
review = upgrade.split('⾃我评价')[-1].split('技能特长')[0]
|
||
else:
|
||
review_chk = true_chkStr.split('工作经历')[0]
|
||
if '自我评价' in review_chk:
|
||
review = review_chk.split('自我评价')[-1]
|
||
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')
|
||
upgrade_chk_list = upgrade.split('\n')
|
||
upgrade_list = []
|
||
if upgrade_chk_list:
|
||
for index, i in enumerate(upgrade_chk_list):
|
||
if index == 0:
|
||
if sum([1 if u'\u4e00' <= x <= u'\u9fff' else 0 for x in i]) <= 0:
|
||
upgrade_list.append(i + upgrade_chk_list[index + 1] + upgrade_chk_list[index + 2])
|
||
break
|
||
else:
|
||
upgrade_list.append(i)
|
||
break
|
||
dict_chk['upgrade'] = upgrade_list
|
||
|
||
else:
|
||
dict_chk['upgrade'] = []
|
||
if '教育经历' in true_chkStr:
|
||
upgrade = true_chkStr.split('教育经历')[-1]
|
||
else:
|
||
upgrade = true_chkStr
|
||
language = []
|
||
remembrance = []
|
||
specialty_do = []
|
||
if '证书' in upgrade:
|
||
chk_upgrade_str1 = upgrade.split('证书')[-1]
|
||
if '专业技能' in chk_upgrade_str1:
|
||
specialty_do = chk_upgrade_str1.split('专业技能')[-1].strip().strip('\n').split('\n')
|
||
remembrance_list_str = chk_upgrade_str1.split('专业技能')[0].strip().strip('\n')
|
||
for i in remembrance_list_str.split('\n'):
|
||
dict_rem = {
|
||
"prize_name": '',
|
||
"prize_time": ''
|
||
}
|
||
if '??' in i:
|
||
dict_rem = {
|
||
"prize_name": i.split('??')[1],
|
||
"prize_time": i.split('??')[0]
|
||
}
|
||
else:
|
||
re_list = re.split('([0-9]{4}[.|/][0-9]{1,2})', i)
|
||
re_list = [i for i in re_list if i.strip()]
|
||
for str in re_list:
|
||
if str[0].isdigit():
|
||
dict_rem['prize_time'] = str
|
||
continue
|
||
dict_rem['prize_name'] = str
|
||
str_rem = copy.deepcopy(dict_rem)
|
||
remembrance.append(str_rem)
|
||
|
||
elif '语言能力' in chk_upgrade_str1:
|
||
remembrance_list_str = chk_upgrade_str1.split('语言能力')[0].strip().strip('\n')
|
||
for i in remembrance_list_str.split('\n'):
|
||
dict_rem = {
|
||
"prize_name": '',
|
||
"prize_time": ''
|
||
}
|
||
if '??' in i:
|
||
dict_rem = {
|
||
"prize_name": i.split('??')[1],
|
||
"prize_time": i.split('??')[0]
|
||
}
|
||
else:
|
||
re_list = re.split('([0-9]{4}[.|/][0-9]{1,2})', i)
|
||
re_list = [i for i in re_list if i.strip()]
|
||
for str in re_list:
|
||
if str[0].isdigit():
|
||
dict_rem['prize_time'] = str
|
||
continue
|
||
dict_rem['prize_name'] = str
|
||
str_rem = copy.deepcopy(dict_rem)
|
||
remembrance.append(str_rem)
|
||
language_list = chk_upgrade_str1.split('语言能力')[-1].strip().strip('\n')
|
||
language_dict = {
|
||
'language_name': '',
|
||
'has_sleep': '',
|
||
'reading': '',
|
||
'writing': ''
|
||
}
|
||
for i in language_list.split('/n'):
|
||
language_dict1 = copy.deepcopy(language_dict)
|
||
language_dict1['language_name'] = i.split(':')[0]
|
||
for i1 in i.split(':')[1].split('|'):
|
||
if '听说' in i1:
|
||
stage_str = '初级'
|
||
if '良好' in i1 or '中极' in i1:
|
||
stage_str = '中级'
|
||
if '熟练' in i1 or '精通' in i1 or '高级' in i1:
|
||
stage_str = '高级'
|
||
language_dict1['reading'] = stage_str
|
||
continue
|
||
if '读写' in i1:
|
||
stage_str = '初级'
|
||
if '良好' in i1 or '中极' in i1:
|
||
stage_str = '中级'
|
||
if '熟练' in i1 or '精通' in i1 or '高级' in i1:
|
||
stage_str = '高级'
|
||
language_dict1['writing'] = stage_str
|
||
language.append(language_dict1)
|
||
elif '培训经历' in chk_upgrade_str1:
|
||
remembrance_list_str = chk_upgrade_str1.split('培训经历')[0].strip().strip('\n')
|
||
remembrance_list_chk = remembrance_list_str.split('\n')
|
||
for index, i in enumerate(remembrance_list_chk):
|
||
if i[0].isdigit():
|
||
time = i
|
||
name = remembrance_list_chk[index + 1]
|
||
if ',' in name:
|
||
for name1 in name.split(','):
|
||
dict_rem = {
|
||
"prize_name": name1,
|
||
"prize_time": time.replace('.', '/')
|
||
}
|
||
str_rem = copy.deepcopy(dict_rem)
|
||
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:
|
||
if '项目经验' in upgrade:
|
||
specialty_do_str = upgrade.split('技能')[-1].split('项目经验')[0]
|
||
else:
|
||
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
|
||
return dict_chk
|
||
|
||
|
||
if __name__ == '__main__':
|
||
# txt = getText_pdf('D:\wokerplay\面试简历\【Android开发工程师_武汉】陈超峰 10年.pdf')
|
||
txt = get_png_txt(r'D:\wokerplay\面试简历1\陈雨蝶.jpg')
|
||
# pdf_path, file_name = png2pdf('D:\wokerplay\面试简历1', '程敏谦-文案策划简历.JPG')
|
||
# txt = pdf_to_text(pdf_path)
|
||
if txt:
|
||
pass
|
||
# 拉勾
|
||
chk_str1 = """
|
||
|
||
方明洋
|
||
5年工作经验 | 本科 | 27岁 | 男
|
||
期望职位: Android / 期望薪资:17k-18k
|
||
联系电话: 13100622896
|
||
电子邮箱: 727527762@qq.com
|
||
|
||
自我描述
|
||
综合能力: 责任心
|
||
本人4年工作经验,意向智能物联网方向,喜欢钻研,热爱技术。
|
||
|
||
|
||
工作经历
|
||
武汉中软国际科技服务有限公司 2018.03 - 至今
|
||
职位:Android中级开发工程师
|
||
我任职于武汉中软国际华为业务线软件工具部。主要职责为开发华为相机自动化流水线测试防护系统。该系统
|
||
基于Jenkins,结合Python,dos,shell脚本,自动化监控指定代码仓,自动集成测试插件至工程源码,自
|
||
动编译,安装,静态代码检查,unit测试,Androidtest,monkey测试,内存检测,自动实时呈现版本测试
|
||
结果。实现应用层全流程自动化,相较于人工测试效率提升300%,上线试运行四周,累计发现应用
|
||
crash,oom,anr,内存泄漏(Java,native层)各类问题总计90多处。后期准备推广至全apk业务流水线使
|
||
用。
|
||
|
||
武汉漫维智能科技有限公司 2017.09 - 2018.04
|
||
职位:安卓研发工程师
|
||
我任职于武汉漫维智能科技有限公司研发部,工作职责为开发Honeypad系统,该系统是面向家庭和商业级
|
||
的智能物联网平台,分为餐桌系统,和茶几系统两大块。Honeypad系统本质是替换Android原生
|
||
launcher,通过自定义基类view,并扩展出各个功能组件模块,在此基础上插件化添加私有模块或者有条件
|
||
接入第三方平台来集成整合各种资源,其中智能茶几系统包括自己开发天气模块,新闻模块,亲自互动模块,
|
||
定制桌面小游戏 ,第三方影视,音乐,APP市场等。智能餐桌系统包括:第三方点餐,小游戏等。 通过后台
|
||
socket主动推送配置文件控制两子种系统切功能切换。
|
||
|
||
1.负责项目基础框架搭建; 2.项目功能模块代码编辑; 3.代码粗测试; 4.版本维护迭代。
|
||
|
||
广州中道电子科技有限公司 2015.11 - 2017.09
|
||
职位:android应用开发工程师
|
||
我任职于广州中道电子科技有限公司。工作职责为,开发中道进销存系统Android客户端应用。该系统主要
|
||
用于管理商户进货销售存储。
|
||
工作描述: 1.开发中道批发APP各模块功能; 2.开发中道批发后台服务端功能模块; 3. Android客户端粗
|
||
测。4.客户端功能迭代开发,5,开发蓝牙打印插件。
|
||
|
||
|
||
项目经历
|
||
漫维智能餐桌 2017.10 - 2018.03
|
||
项目描述:
|
||
开发环境:Windows
|
||
开发工具:Androidstudio,MySQL,Androidtools ,固件工厂,
|
||
项目名称:Honeylauncher
|
||
项目描述:漫维智能餐桌/茶几,HoneyPAD致力于打造基于互联网技术的高端智能平台, 提供以智能餐桌,
|
||
智能茶几,广告交互机为主体的一站式商业解决方案。
|
||
1.漫维智能餐桌/茶几系统是基于honeylauncher平台,honeylauncher实质为Android launcher替换系统
|
||
开机launcher,该框架采用HTTP2.0通信协议,保证通信安全,同时也可以在服务端主动像客户端推送信息
|
||
或者跟新版本。
|
||
2.项目主页分为三四大区域,天气新闻插件区,主功能区,我的功能,快捷管理,
|
||
你的成就:
|
||
项目框架开发功能代码实现
|
||
|
||
中道打印插件(蓝牙打印机) 2017.05 - 2017.07
|
||
项目描述:
|
||
软件环境:Windows
|
||
|
||
开发工具:Eclipse
|
||
|
||
责任描述:
|
||
1.项目基础框架,实现功能流程图;
|
||
2.功能模块编码,UI界面;
|
||
3.测试项目代码,兼容测试;
|
||
|
||
项目简介:中道打印插件,手机app蓝牙连接打印机基础插件服务,在手机app需要打印功能时候,调用该
|
||
插件服务,搜寻范围内可用的蓝牙设备,标识当前所有已搜寻到的蓝牙设备状态并分类显示;点击设备列表弹
|
||
框提示绑定设备连接设备成功后,调用系统打印api 插件置打印中设置默认打印属性以及预设打印属性;连
|
||
接打印设备后预览打印页面生成pdf文件,传送至打印设备,并设置打印命令更改打印动作;
|
||
|
||
1.该插件可以匹配所有可搜索的蓝牙设备;
|
||
2.该插件适配所有支持蓝牙功能的打印机(无需下载官方打印插件);
|
||
3.该打印插件实质上实现系统的打印接口,重写自己需要的方法;
|
||
|
||
你的成就:
|
||
app开发
|
||
|
||
中道批发 2016.11 - 2017.04
|
||
项目描述:
|
||
项目简介:软件环境:windows
|
||
开发工具:Eclipse NetBeans MySql 5.0,NavicatForMySQl
|
||
项目简介:
|
||
中道批发是一款适用于中小企业商铺的进销存管理软件,该系统拥有完整的店铺销售管理权限体系,订单
|
||
流程控制跟踪体系,商品进货,销售,存储管理信息体系;从客户下单到产品生产完毕交货整个流程的控制,
|
||
管理,并兼容各种不同终端(平板,手机);该项目通信基于PPP+TLV报文协议,8组RESKey加密报文传
|
||
输。同时对于服务端拓展性更强,适用于多种数据库;
|
||
责任描述:
|
||
1.1.客户端编写项目下单模块,款式生产计划,工厂订单,工厂订单跟踪,我的模块中APP更新,切换云主
|
||
机与指定i地址模块;
|
||
2.服务端 编写各个项目功能模块中Action类解析通信报文以及操作数据库,生成响应数据到客户端;
|
||
3.服务端代码测试,客户模块化各个功能,作为lib库加入到主项目中去,解耦项目各个模块,便于后期维
|
||
护;
|
||
4.客户端功能代码压力测试,逻辑测试,UI测试,IO测试;1.店铺下单模块功能;
|
||
5.总部款式生产计划模块,工厂计划模块,采购任务指派,采购过程记录,裁床跟踪模块;
|
||
6.fragment中模块功能分类(类似支付包分组功能界面)
|
||
2.项目描述:
|
||
1.使用第三方stickyheaderlistview分类各fragment中功能模块。
|
||
2. 使用第三方ObservablescrollowView实现下拉弹性空间文字渐变。
|
||
3.使用XListview实现下拉刷新列表上拉加载更多。
|
||
4.自定义控件MyHorizontalScrollowView实现复杂表格横向,纵向滑动(解决小屏幕表格显示不全问题)
|
||
5合并表格行;
|
||
6.模块化项目功能;
|
||
7.自定义输入框InputDialog;
|
||
8.服务端定义Action类处理客户端不同界面的不同数据库操作请求;
|
||
9服务端service类定义各个对应模块中CRUD操作数据库方法;
|
||
|
||
你的成就:
|
||
客户端app开发
|
||
|
||
焦点新闻 2016.08 - 2016.08
|
||
项目描述:
|
||
● 项目名称:焦点新闻
|
||
● 开发周期:2015.04—2015.07
|
||
● 开发工具:AndroidStudio2.0+SVN
|
||
● 项目描述:此项目为一个新闻资讯类手机客户端,主要包括以下几个模块首页、新闻,创意、家居、军 事、
|
||
娱乐等功能模块,用户可以自由订阅添加自己喜欢和关系的内容,使用起来非常方便。
|
||
● 1.项目基本框架 应用结构采用的是SlidingMenu开源框架,整体分为侧滑菜单界面和内容界面两个部分。
|
||
内容界面采用ViewPager加上ViewPagerIndicator的设计模式。为了实现各个界面的统一管理,抽取出一
|
||
个基类BasePager,对外暴露initView()和initData()两个方法,供每个模块使用。这样每个模块只需要实现
|
||
这两个方法就可以了,从而达到代码的复用。
|
||
● 2.头条热点,读图的开发 ListView用于展示从网络上获取的数据,并在ListView的头部添加一个可以轮播
|
||
的ViewPager热点新闻图片,在ListView的尾部添加一个加载更多的布局。 界面采用
|
||
Fragment+ViewPager的框架模式,自定义ViewPager的懒加载(去除预加载),当用 户切换ViewPager是
|
||
才进行数据请求,节约用户流量.
|
||
你的成就:
|
||
安卓端app开发
|
||
|
||
一元秒杀 2016.07 - 2016.07
|
||
项目描述:
|
||
● 项目描述:
|
||
天猫百里挑一,特惠商品折上折,每日精选最划算的天猫商品,正 品 给力不加价,选择我 们不
|
||
需要理由!!!分类齐全,数码, 女装,男 装,家居,母婴,鞋包,配饰等栏目,淘宝独家 商
|
||
品 优惠选择。
|
||
1.对项目进行分析,对视图层框架搭建,界面统一。主界面采用RadioGroup+ViewPager的设
|
||
计模式,并且要自定义一个ViewPager重写ViewPager的事件处理机制,让ViewPager不
|
||
能处理滑动事件,通过点击RadioGroup来实现页面的切换。为了实现界面的统一管理,抽
|
||
取一个基类BasePager,对外暴露initView()和initData()两个方法,共每个模板使用。这样
|
||
每个模块只需要实现这两个方法就可以了,从而达到代码的复用。
|
||
2.主页、逛街、主题的开发 ListView用于展示从网络上获取的数据,并在ListView的头部添
|
||
加一个布局文件,这个布局文件包括了信息显示的轮播图,分类信息男装、数码、创意等,这
|
||
样就可以达到让头布局和ListView进行联动的效果。在主页使用一个帧布局,点击可以实现
|
||
ListView和GridView视图切换的效果。 3.在分类信息中,每个分类信息布局基本相同,通过
|
||
抽取一个布局文件,通过include进入布局文 件的复用。
|
||
你的成就:
|
||
负责安卓端app开发任务
|
||
|
||
美食天下 2015.04 - 2015.07
|
||
项目描述:
|
||
● 软件环境:windows
|
||
|
||
● 开发工具:Androidstudio +svn
|
||
|
||
● 责任描述:首页Tween Animation,
|
||
登录界面通过Json解析Xml实现登录服务器交互
|
||
我的个人界面
|
||
|
||
● 项目简介:全球美食精品荟萃,发掘各类美食菜谱,蒸煮焖烩炒煎炸,从家常菜到人气料
|
||
理,从正餐到甜点,从养生汤到减肥餐,搜集美食智慧,品评美食文化,体会美食乐趣。美食
|
||
菜谱,简单的名字,幸福的滋味!海量不同菜系菜谱,满足您的个性化需求!
|
||
|
||
你的成就:
|
||
通信模块编码
|
||
|
||
|
||
教育经历
|
||
汉口学院 本科 / 电子信息工程 2011 - 2015
|
||
|
||
"""
|
||
# 前程无忧
|
||
chk_str2 = """
|
||
基本信息
|
||
李立宏
|
||
男 | 30 岁 (1990/01/12) | 174cm
|
||
未婚 | 9年工作经验
|
||
手机号码:15827401448
|
||
QQ号:761193190
|
||
求职状态:目前正在找工作
|
||
邮箱:hong199012@qq.com
|
||
居住地:武汉-洪山区
|
||
工作经验
|
||
2017/3―至今 [3年6个月]
|
||
C++服务器主程 | 研发
|
||
武汉多游科技有限公司
|
||
网络游戏 | 民营公司 | 50-150人
|
||
工作描述:
|
||
1.独立负责棋牌游戏 “黔友贵州麻将”的研发,上线及运营,更新
|
||
2.帮助客户端搭建底层跨平台通讯库
|
||
3.配合管理后台开发人员建表并生成数据,提升运营能力
|
||
4.服务器采用windows下c++开发,使用mssql Server 数据库,客户端采用cocos lua
|
||
5.游戏每日最大3千多人同时在线,在线运营时间两年多,非常稳定!
|
||
6.移植服务器到linux下稳定运营,数据库用mysql, linux下使用qt!
|
||
7.精通cocos2dx c++开发,完整的cocos开发上线经验。
|
||
熟练掌握:
|
||
1.熟悉mysql,redis和cocos c++
|
||
2.熟悉游戏服务器大用户量同时在线的架构设计
|
||
3.熟悉格斗,捕鱼,手游类游戏的帧同步设计
|
||
2016/6―2017/3 [9个月]
|
||
C++服务器主程 | 技术
|
||
武汉百达富嘉网络科技有限公司
|
||
网络游戏 | 民营公司 | 少于50人
|
||
工作描述:
|
||
1.独立负责德州游戏"人人德州”服务器的网络,数据库,业务等模块的开发以及整体框架的搭建,“人人德州”
|
||
这款游戏已在苹果商店上线。
|
||
2.完成癞子麻将创建房间,加入房间,准备游戏,听牌,胡牌,正常的玩多盘麻将,每盘的战绩统计,房间结束,房间战绩统计等主要功
|
||
能。
|
||
3.实现斗地主的AI算法,可以进行一般水平的打扑克。
|
||
熟练掌握:
|
||
1.精通linux c++ qt开发,开发了一个linux版本的麻将服务器
|
||
2.熟悉Cocos2d-X C++开发
|
||
来自前程无忧简历
|
||
2014/5―2016/5 [2年]
|
||
手游GM工具开发工程师,APP服务器开发工程师 | 研发
|
||
上海晟旗网络科技有限公司
|
||
网络游戏 | 民营公司 | 少于50人
|
||
工作描述:
|
||
这是一家手游公司,公司推出的手游有"来自仙剑的你"和"死神"(Q版来自仙剑的你),我负责公司手游GM
|
||
运营工具的开发和游戏服务器的功能开发。
|
||
项目经验:
|
||
1.QT版游戏GM工具
|
||
项目模块:
|
||
a,玩家log,
|
||
b,玩家数据,
|
||
c,gm log,
|
||
d,玩家投诉,
|
||
e,发布公告(全服公告),
|
||
f,充值补偿,
|
||
g,奖励补偿(全服奖励),
|
||
h,cdkey查询,玩家禁言等
|
||
项目基于C/S架构,采用C++语言开发,使用windows api和QT界面库,stl,boost标准库,mongodb数据库。
|
||
2.Web版游戏GM工具,
|
||
项目基于B/S架构,使用C#语言, asp.net mvc框架, mongodb数据库。
|
||
3.大厅服务器业务功能的开发。
|
||
4.游戏的第三方登录模块和第三方支付模块。
|
||
熟练掌握:
|
||
1, 用C++ boost开发Tcp server和Http Server,以及linux下的Epoll Server。
|
||
2, 了解负载均衡和分布式,
|
||
a,负载均衡使用虚拟ip技术实现.即链路层的负载。
|
||
b,难点在于数据库的扩展,玩家数据一直增加,io查询所花的时间就越长.数据库的优化在于1,页面缓存 2,表的分割
|
||
3,索引等。页面缓存就是操作系统的缓存机制,对于单台数据库而言,增加内存即可.表的分割我个人觉得只能适当分割,分割太
|
||
细维护难度太大.索引很好,通过B+树数据结构,就像字典的目录那样,大大的加快了的数据的查询速度.搜索引擎的索引就是
|
||
key和postion的结构.
|
||
c,公司的服务器结构就是一个区一台服务器,每个服务器对应的有两台数据库服务器,一个master,一个slave
|
||
3, DirectX C++音乐播放器,视频播放及vmr9视频播放,mongodb下载服务,Lucene .net(C#开源搜素引擎),ActiveMQ等。
|
||
2013/3―2014/5 [1年2个月]
|
||
C# ArcGIS研发工程师 | 软件研发
|
||
武汉聪源科技有限责任公司
|
||
计算机软件 | 民营公司 | 少于50人
|
||
工作描述:
|
||
这是一家地球空间信息相关行业的软件公司。我负责广东省电力设计研究院前期选址选线系统的开发。
|
||
来自前程无忧简历
|
||
项目名称: 广东省电力设计研究院前期选址选线系统
|
||
项目职责:
|
||
1, 负责广东省电力设计研究院前期选址选线系统的选线部分。
|
||
2, 选线部分最难的:最优路径算法的实现。
|
||
(这个系统主要由两个部分组成,即选址和选线。选址就是选择变电站的站址,共有起点和终点两个站址。选线就是在这两
|
||
个站址之间规划出一条线路,用于布置电缆和电线。 选线线路要符合:(1)
|
||
路径最短,在要避让障碍物的前提下,生成出一条距离最短的线路。 (2)
|
||
经济最优化,也即线路的转角塔数量要最少,线路所跨越区域天气情况要好,以及线路与障碍物之间的距离要最短,大于
|
||
避让范围 等。(3)
|
||
线路精度最精确,客户方要求的精度是100米,而一开始生成的线路精度只有500米,为了优化这个算法花了很长时间。(4)
|
||
指定线路必过点和线,在线路生成模块里,指定必过点和线,那么生成的线路就必须要经过这些点和线。)
|
||
3,
|
||
完成模块:a.系统配置模块,b.线路配置模块,c.线路导入模块,d.线路生成模块,e.线路编辑模块,f.数据上传模块,g
|
||
.选线工程结构树状图模块,h.线路分段模块,i.协议配置模块 等。
|
||
(选线工程结构图的结构是:项目下有起点,终点和多个方案,每个方案下有多个线路版本和多个线路分段,每个分段对应一
|
||
个分段协议,这些协议是客户方与线路所经过的每个地方政府所签订的,每个线路版本包含这些分段。)
|
||
4, 选线部分涉及很多的算法,在线路导入,线路生成,线路优化,线路分段等模块中都有体现。算法是选线部分最难的点。
|
||
5, 编写选线工程结构管理设计文档和测试用例。
|
||
熟练掌握:
|
||
1, 对游戏比较感兴趣, 实现一个有客户端和服务器的五子棋。五子棋的算法是自己实现的。
|
||
2, 精通C++ MFC开发。
|
||
2011/4―2013/3 [1年11个月]
|
||
软件工程师 | 技术研发
|
||
武汉家事易农业科技有限公司
|
||
互联网/电子商务 | 民营公司 | 150-500人
|
||
工作描述:
|
||
这是一家日用品电商公司。我负责流水线PDA系统及其他管理系统的开发。
|
||
工作职责:
|
||
1,一期PDA服务器端的流水的记录以及客户端的修改。
|
||
2,二期PDA项目整个PDA客户端的开发以及PDA服务器端的修改和并发的处理。
|
||
(客户端加入了自己很多的想法,比如和服务器中断连接后能够自动连接服务器,当连接上服务器之后会有相应的提示,
|
||
让工作人员继续做集货,验货等任务)
|
||
3,用WCF搭建公司整个系统的框架(WCF端提供三个服务,分别服务于公司的三个系统)。
|
||
4,,会员注册模块的开发。
|
||
5,质量追溯系统的开发。
|
||
熟练掌握:
|
||
1, 熟悉MFC开发,Windows消息机制, QT 开发。
|
||
来自前程无忧简历
|
||
2, 熟悉XNA,Cocos2d-X引擎,用XNA做过一个类似于捕鱼达人的2D游戏和一个3D模型。
|
||
教育经历
|
||
2008/9-2011/7
|
||
武汉工业职业学院
|
||
大专 | 设计
|
||
求职意向
|
||
职能:后端开发
|
||
职位:服务器工程师
|
||
工作地点:武汉, 上海
|
||
行业: 计算机软件,互联网/电子商务,计算机硬件,网络游戏,通信/电信/网络设备
|
||
期望薪资:20000-40000元/月
|
||
到岗时间:随时
|
||
工作类型:全职
|
||
自我评价: 1.我是一个非常专注的人,对于我要做的事情我会做的很深,花大部分时间去钻研。专业化
|
||
能使你获得很大的财富,这是美国的一位 牛逼的期货交易员说的话。
|
||
2.熟练掌握C++,C#语言
|
||
3.精通服务器程序开发,熟悉pc端,cocos c++程序开发
|
||
技能特长
|
||
证书/成绩
|
||
2009/4
|
||
c1驾驶执照 , 英语三级
|
||
培训经历
|
||
2010/8-2011/4
|
||
.Net
|
||
培训机构:
|
||
北大青鸟
|
||
来自前程无忧简历
|
||
|
||
"""
|
||
# 智联1
|
||
chk_str3 = """应聘职位: Web开发工程师
|
||
应聘机构: 武汉乐谷在线科技有限公司 智联招聘
|
||
工作地点: 武汉
|
||
ID:dKwLUJmFEUKjMy4LHsfzudiXdMlnCO9K 最近活跃时间:6 月 8 日
|
||
张双琪
|
||
女 22岁 (1998年1月) 大专 考虑机会
|
||
现居住地:武汉 | 户口:孝感
|
||
手机:18727456476
|
||
E-mail:2576444306@qq.com
|
||
求职意向
|
||
web前端 武汉
|
||
4001-6000元/月| 互联网、IT服务、计算机软件| 全职
|
||
自我评价
|
||
1.对于研究新技术有浓厚的兴趣,善于分析总结
|
||
2.自学能力强,在疫情期间自学了node.js和vue.js
|
||
3.对工作认真负责,有较强的责任心,性格开朗,有较强的心3.理素质和抗压能力,在逆境时会对自身负情绪进行自我调节
|
||
4.有上进心,对团队协调能力强,有较强的团队意识
|
||
工作经历
|
||
2019.07-2020.01 武汉筑梦科技有限公司 (7个月)
|
||
web前端 |2001-4000元/月
|
||
计算机软件
|
||
工作描述: 主要从事自己负责Web前端开发。根据需求说明和设计文档,完成所分模块的开发及负责模块的单元测试工作。
|
||
协助UI设计师完成也是设计工作,提出技术实现条件。负责前端页面的开发和前端交互的设计,以及网站前端
|
||
性能的优化和提升
|
||
项目经历
|
||
2019.11-2020.01 仿小米商城
|
||
项目描述: 项目描述:该项目包括首页,商品列表页,商品详情页,购物车页,注册页,登录页
|
||
开发技术:HTML+CSS,JavaScript,HTML5+CSS3,Vue.js
|
||
具体模块 : 包括注册页、登录页、首页、商品展示页、购物车页
|
||
功能介绍:1. 主要运用HTML5+CSS3来布局页面,用JavaScript使得页面更加生动灵活
|
||
2. 分别运用了路由的调转来进行页面的切换调转的功能
|
||
3. 在首页的购买操作会记录在购物车的信息
|
||
岗位职责:
|
||
注册页:对用户输入的内容进行正则验证,随机验证码的验证
|
||
登录页:对用户提交的数据进行后台请求返回不同的页面,登陆成功改变登录状态
|
||
购物车:ajax请求用户的数据,并同步页面与数据库中的数据首页:采用vue.js通过数据来驱动视图,实现首页
|
||
的完美布局。
|
||
项目心得:
|
||
1.对vue.js用数据驱动试图更加的深刻,对页面的整体布局有较深的理解
|
||
2.更加了解结构逻辑,更加提升了自己的编程能力
|
||
2019.10-2019.11 家装无忧
|
||
项目描述: 开发技术:HTML+CSS,JavaScript,HTML5+CSS3,Bootstrap
|
||
项目描述:这是一个具特色的装饰公司的线上宣传网站,利用当下比较流行的
|
||
HTML5+CSS3对网页元素的渲染有着耳目一新的特点,利用Bootstrap框架JavaScript使得网页的展示效果更具潮
|
||
流且生动,使得网页具有响应式布局的特点,用户在浏览时更能清楚快速的理解设计理念。
|
||
具体模块:包括首页、装修案例展示、设计师团队页、在线咨询、装修选材页面、招聘六大模块。
|
||
责任描述:
|
||
装修案例展示页面的开发:将具有优秀代表的装修案例工程项目展示。
|
||
装修知识的分类展示的开发:利用特色吸引用户的关注。
|
||
家装案例中部分家装风格模块的开发:把案例具体化。
|
||
了解家装无忧部分模块的开发:将企业风格,企业宗旨,企业理念以及业务具体展现。
|
||
项目心得:
|
||
1.在完成项目的过程中,让我更加熟练的掌握了JavaScript的知识,锻炼了自己的编程能力
|
||
2.让我对网页的布局动画等有了更深的理解,能够轻松简单的操作HTML5+CSS3渲染动态网页效果
|
||
3.运用Bootstrap实现网页的响应式布局,适用不同的窗口展示区域的页面展示。
|
||
教育经历
|
||
2018.09 - 2020.06 湖北科技职业学院 移动应用开发 大专
|
||
培训经历
|
||
2019.10 - 2020.01 ajax,bootstrap,php,vue.js
|
||
培训机构: 百里半
|
||
证书
|
||
2019.12 1+x中级证书
|
||
2018.03 学院二等奖学金
|
||
专业技能
|
||
html+css:熟练
|
||
php和nodejs:一般
|
||
bootstrap:熟练
|
||
HTML5+CSS3:熟练
|
||
JavaScript:熟练
|
||
jquery:熟练
|
||
ajax:一般
|
||
vue.js:良好
|
||
|
||
"""
|
||
# 智联2
|
||
chk_str4 = """
|
||
应聘职位: Web开发工程师
|
||
应聘机构: 武汉乐谷在线科技有限公司 智联招聘
|
||
工作地点: 武汉
|
||
ID:dKwLUJmFEUKjMy4LHsfzueVqNyJnCO9K 最近活跃时间:6 月 10 日
|
||
聂礼旺
|
||
男 23岁 (1997年2月) 3年工作经验 大专 离职,随时到岗
|
||
现居住地:黄冈 红安县 | 户口:黄冈
|
||
手机:15771198025
|
||
E-mail:nie_fairy@163.com
|
||
求职意向
|
||
web前端 武汉
|
||
4001-6000元/月| 计算机软件| 全职
|
||
工作经历
|
||
2018.04-2019.10 湖北国网华中科技开发有限责任公司 (1年 7个月)
|
||
web前端开发 |4001-6000元/月
|
||
计算机软件
|
||
工作描述: 1、百分百还原UI设计页面
|
||
2、与后端沟通交流完成页面的交互作用
|
||
3、用vue,原生JS,bootstrap,mui等框架完成项目
|
||
4、有独立项目开发经验,会APP开发、能熟练处理兼容问题
|
||
项目经历
|
||
2019.09-2019.10 武汉市配网规划资料管理系统(移动端)
|
||
项目描述: 项目是一公司为国网武汉供电公司设计的一款用于各个区之间文件管理的app,采用vue和mui框架构建。
|
||
2019.08-2019.09 湖北省汉江崔家营航电枢纽管理系统(已上线)
|
||
项目描述: 该项目是为湖北省汉江崔家营航电枢纽管理处设计的官网,项目整体采用原生JS,是崔家营航电管理处和湖北省
|
||
运输交通厅连接的公众平台
|
||
2018.08-2019.10 浙江浙能集团能源综合系统
|
||
项目描述: 主要功能是入设计领导首页和数据展示页面,通过canvas和echarts实现数据可视化操作,更加生动形象的来展
|
||
示数据。
|
||
2018.01-2018.05 医疗器械销售平台开发(移动端)
|
||
项目描述: 项目是一款医院和医疗器械公司内部使用的手机端APP,采用vue框架构建,其 中涉及mui触控滑动模块,slide
|
||
子页之间采用了懒加载技术保证用户体验。
|
||
教育经历
|
||
2016.09 - 2019.07 武汉软件工程职业学院 软件工程 大专
|
||
证书
|
||
2018.06 大学英语四级
|
||
语言能力
|
||
英语: 读写能力良好 | 听说能力熟练
|
||
|
||
"""
|
||
# 自制简历
|
||
chk_str5 = """应聘职位: Web开发工程师
|
||
应聘机构: 武汉乐谷在线科技有限公司 智联招聘
|
||
工作地点: 武汉
|
||
ID:dKwLUJmFEUKjMy4LHsfzudiXdMlnCO9K 最近活跃时间:6 月 8 日
|
||
张双琪
|
||
女 22岁 (1998年1月) 大专 考虑机会
|
||
现居住地:武汉 | 户口:孝感
|
||
手机:18727456476
|
||
E-mail:2576444306@qq.com
|
||
求职意向
|
||
web前端 武汉
|
||
4001-6000元/月| 互联网、IT服务、计算机软件| 全职
|
||
自我评价
|
||
1.对于研究新技术有浓厚的兴趣,善于分析总结
|
||
2.自学能力强,在疫情期间自学了node.js和vue.js
|
||
3.对工作认真负责,有较强的责任心,性格开朗,有较强的心3.理素质和抗压能力,在逆境时会对自身负情绪进行自我调节
|
||
4.有上进心,对团队协调能力强,有较强的团队意识
|
||
工作经历
|
||
2019.07-2020.01 武汉筑梦科技有限公司 (7个月)
|
||
web前端 |2001-4000元/月
|
||
计算机软件
|
||
工作描述: 主要从事自己负责Web前端开发。根据需求说明和设计文档,完成所分模块的开发及负责模块的单元测试工作。
|
||
协助UI设计师完成也是设计工作,提出技术实现条件。负责前端页面的开发和前端交互的设计,以及网站前端
|
||
性能的优化和提升
|
||
项目经历
|
||
2019.11-2020.01 仿小米商城
|
||
项目描述: 项目描述:该项目包括首页,商品列表页,商品详情页,购物车页,注册页,登录页
|
||
开发技术:HTML+CSS,JavaScript,HTML5+CSS3,Vue.js
|
||
具体模块 : 包括注册页、登录页、首页、商品展示页、购物车页
|
||
功能介绍:1. 主要运用HTML5+CSS3来布局页面,用JavaScript使得页面更加生动灵活
|
||
2. 分别运用了路由的调转来进行页面的切换调转的功能
|
||
3. 在首页的购买操作会记录在购物车的信息
|
||
岗位职责:
|
||
注册页:对用户输入的内容进行正则验证,随机验证码的验证
|
||
登录页:对用户提交的数据进行后台请求返回不同的页面,登陆成功改变登录状态
|
||
购物车:ajax请求用户的数据,并同步页面与数据库中的数据首页:采用vue.js通过数据来驱动视图,实现首页
|
||
的完美布局。
|
||
项目心得:
|
||
1.对vue.js用数据驱动试图更加的深刻,对页面的整体布局有较深的理解
|
||
2.更加了解结构逻辑,更加提升了自己的编程能力
|
||
2019.10-2019.11 家装无忧
|
||
项目描述: 开发技术:HTML+CSS,JavaScript,HTML5+CSS3,Bootstrap
|
||
项目描述:这是一个具特色的装饰公司的线上宣传网站,利用当下比较流行的
|
||
HTML5+CSS3对网页元素的渲染有着耳目一新的特点,利用Bootstrap框架JavaScript使得网页的展示效果更具潮
|
||
流且生动,使得网页具有响应式布局的特点,用户在浏览时更能清楚快速的理解设计理念。
|
||
具体模块:包括首页、装修案例展示、设计师团队页、在线咨询、装修选材页面、招聘六大模块。
|
||
责任描述:
|
||
装修案例展示页面的开发:将具有优秀代表的装修案例工程项目展示。
|
||
装修知识的分类展示的开发:利用特色吸引用户的关注。
|
||
家装案例中部分家装风格模块的开发:把案例具体化。
|
||
了解家装无忧部分模块的开发:将企业风格,企业宗旨,企业理念以及业务具体展现。
|
||
项目心得:
|
||
1.在完成项目的过程中,让我更加熟练的掌握了JavaScript的知识,锻炼了自己的编程能力
|
||
2.让我对网页的布局动画等有了更深的理解,能够轻松简单的操作HTML5+CSS3渲染动态网页效果
|
||
3.运用Bootstrap实现网页的响应式布局,适用不同的窗口展示区域的页面展示。
|
||
教育经历
|
||
2018.09 - 2020.06 湖北科技职业学院 移动应用开发 大专
|
||
培训经历
|
||
2019.10 - 2020.01 ajax,bootstrap,php,vue.js
|
||
培训机构: 百里半
|
||
证书
|
||
2019.12 1+x中级证书
|
||
2018.03 学院二等奖学金
|
||
专业技能
|
||
html+css:熟练
|
||
php和nodejs:一般
|
||
bootstrap:熟练
|
||
HTML5+CSS3:熟练
|
||
JavaScript:熟练
|
||
jquery:熟练
|
||
ajax:一般
|
||
vue.js:良好
|
||
"""
|
||
# boss直聘
|
||
chk_str6 = """
|
||
`
|
||
个人资料__
|
||
姓 名:吴操 出生年月:1998.04 专 业:计算机网络 电子邮箱:2787668634@qq.com
|
||
性 别:男 学 历:专科 手 机:15007265224 毕业院校:武汉信息传播职业技术学院
|
||
__专业技能__
|
||
精通 Word、Photoshop、AutoCAD、Adobe Dreamweaver、Xshell等软件;
|
||
熟练CDH大数据平台的部署和系统故障的检测;
|
||
熟练操作linux系统常用命令;
|
||
熟练部署grafana监控系统;
|
||
熟练操作挖矿病毒的检测与查杀;
|
||
熟悉windows、windows server各版本、linux操作系统的安装;
|
||
熟悉TCP/IP的四层/七层协议;
|
||
熟悉mysql、pgsql数据库搭建,及数据库的数据备份和恢复;
|
||
熟悉计算机硬件搭配及故障处理;
|
||
熟悉浪潮服务器、飞塔、深信服、三层交换机的搭建
|
||
参与H3C-f1000-AK115防火墙的搭建;
|
||
工作经历
|
||
2020.08-2021.06 深圳市蓝泰源信息技术股份有限公司 运维工程师
|
||
1、 负责在linux和windows server上部署saas、mysql、pgsql、CDH、ERP以及vms视频服务,并安装
|
||
grafana监控系统;
|
||
2、 防火墙配置更新及日常网络查询,三层交换机vlan划分,二层交换机网口检测;
|
||
3、 网络问题处理,以及机房服务器、防火墙和交换机的软硬件故障处理;
|
||
4、 负责与合作公交公司、中铁二院等三个项目主管进行技术对接的协调与沟通,以及公司10个旧项目
|
||
的故障处理;
|
||
5、 桌面运维故障处理,以及员工入职/离职电脑资产分配,为新员工分配IP,划分网段;
|
||
6、 负责服务器日常巡检、软件更新、数据备份、故障查询、安全防护等;
|
||
2019.10-2020.08 北京优海网络科技有限公司 运维工程师
|
||
1、 负责 Linux/Windows、mysql、华为华三、深信服、飞塔、专用点餐软件等软硬件维护;
|
||
2、 负责10家门店的软硬件故障检测与维护,及时处理各门店的故障反馈,并定期给所有门店进行日常
|
||
巡检;
|
||
3、 负责搭建新门店内部网络、服务器、交换机、防火墙、路由器等设备,录入餐厅内各种布局数据,
|
||
修改APP内UI界面信息等,最后进行数据打版,完成门店信息建设;
|
||
4、 保证各门店网络正常运行,配置飞塔内网,确保VPN运行正常,确保总部随时可以远程查看数据;
|
||
5、 协助各门店更新paid上专用APP,处理电脑上OA系统的故障;
|
||
项目经历
|
||
1、 项目名称:办公机房防火墙和三层交换机设备升级
|
||
硬件环境:H3C-F1000-AK115、H3C-S5560
|
||
项目简介:公司防火墙和三层交换机设备老化,导致公司网络偶尔接触不良
|
||
职责描述:1.借此机会给公司重新规划IP,划分vlan;
|
||
2.将IP确定到个人,并监控每个人流量速率,保证办公网络正常运行;
|
||
3.更换光纤网络;
|
||
2、 项目名称:达州机房建设
|
||
硬件环境:9台宝德服务器,一台数据存储服务器,一台防火墙、一台路由器,一台三层交换机,一
|
||
台二层交换机
|
||
项目简介:出差到四川达州搭建机房,划分机房服务器作用,备份数据库数据,更新老旧软件,协
|
||
助部署虚拟化平台
|
||
职责描述:1.重新规划整理机房服务器,确保服务器按IP顺序排列;
|
||
2.升级服务器硬件配置,普通服务器内存由8G升级到16G,磁盘由2G变为4G,并做Raid 1,
|
||
数据库服务器内存由16G升级到32G,磁盘由2G升级到8G;
|
||
3.协助宝德工程师将服务器资源整合,制作虚拟平台;
|
||
4.在虚拟平台上搭建ERP、saas、mysql、pgsql、nginx、tmp、CDH、redis、odoo 11、
|
||
vms视频和grafana监控系统;
|
||
5.搭建完成后,测试运营数据是否正常,软件功能是否正常启用;
|
||
3、 项目名称:新门店建设
|
||
硬件环境:光纤一条、戴尔R730服务器两台,飞塔防火墙一台,路由器一台,三层交换机一台,审
|
||
计一台,二次交换机5台,海康威视监控一台,9台AP设备,13台打印机,5台戴尔电脑
|
||
项目简介:新门店建设,按照配置文档将门店建设起来
|
||
职责描述:1.使用自己电脑测试网络是否符合标准;
|
||
2.网线直插飞塔防火墙进行配置,确保VPN正常使用;
|
||
3.配置三层交换机进行vlan划分;
|
||
4.部署服务器,制作RAID 5,部署mysql数据库,保证网络通畅;
|
||
5.部署审计,并让AP设备连接审计,测试AP设备网络,保证网速;
|
||
6.录入门店详细参数;
|
||
7.测试验证录入效果,以及到门店各处测试网络和各处打印机是否正常联网打印;
|
||
8.确定无问题后,试营业进行最后测试;
|
||
9.后台删除所有数据,重新上传门店信息,进行数据打版,正式开始运营;
|
||
自我评价
|
||
优点
|
||
1、为人踏实肯干,原意积极主动解决工作生活中遇到的各种问题;
|
||
2、待人真诚,能很好的和同事领导相处,提高工作效率;
|
||
3、做事认真负责,有较强的责任心,具有较强的适应能力、抗压能力和团队协作能力;
|
||
缺点
|
||
专业能力有些欠缺,不太善于表达。但我原意好好学习,也一定会好好学习,希望贵公司能给我个机会,
|
||
我一定好好珍惜,认真工作,努力提升自己的专业能力,为公司创造更大的价值。
|
||
|
||
"""
|
||
# 自制简历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、 极光统计和推送
|
||
|
||
|
||
|
||
|
||
|
||
|
||
"""
|
||
# 自制简历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上的开源库,学到新的技术点善于归纳总结。
|
||
|
||
"""
|
||
# 测试简历1
|
||
test_str1 = """
|
||
个 人 简 历
|
||
个人概况:
|
||
姓名: 张林源 性别: 男 民族: 汉
|
||
出生年月: 1986 年 1 月 14 日
|
||
联系方式:
|
||
手机:13545172502 QQ: 4763202
|
||
Email:4763202@qq.com
|
||
最高学历:
|
||
最高学历学校:湖北经济学院 学历:大专
|
||
专业:应用电子技术
|
||
时间:2004 年 9 月----------------------2007 年 7 月
|
||
工作经历:
|
||
2020.6----------------2021.8 武汉心驰神往
|
||
在武汉心驰神往络任资深 3D 动作师。任职期间参与了 U3D 手游《TD》
|
||
(决战动物星)《COT》(Clash of Toys)以及动作游戏《兔兔大作战》。
|
||
制定项目动作资源的制作规范使用规范和动作相关技术文档;项目内
|
||
所有主角和英雄的动作设计和制作;项目内所有怪物及 NPC 的动作设
|
||
计和制作;游戏和项目内所有过场动画和登陆界面展示动画的制作;
|
||
游戏所有宣传视频的动画制作; (U3D 休闲手游和动作手游)
|
||
2019.4----------------2020.6 武汉从玉网络
|
||
在武汉从玉网络任 3D 动作师。任职期间参与了 U3D 手游《战
|
||
争热潮》《国王万岁》以及三国题材等项目的开发。负责项目内所有
|
||
主角和英雄的动作设计和制作;项目内所有怪物及 NPC 的动作设计和
|
||
制作;游戏和项目内所有过场动画和登陆界面展示动画的制作;游戏
|
||
所有宣传视频的动画制作; (U3D 手游)
|
||
2016.11----------------2019.4 武汉火游网络
|
||
在武汉火游网络任 3D 动作师。任职期间参与了 U3D VR 游戏《超
|
||
忍英雄》《机甲阵地》《钢魂》《赛博火》等游戏和项目的开发。负责
|
||
游戏和项目内所有角色和的动作设计和制作;游戏和项目内所有怪物
|
||
的动作设计和制作;游戏和项目内所有过场动画的制作;游戏所有宣
|
||
传视频的动画制作;游戏和项目所以展示动画的制作。(U3D 和 UE4 )
|
||
2016.8------------2016.11 武汉创客数字
|
||
在武汉创客数字任动作师。任职期间参与了 U3D 次时代 VR 游
|
||
戏的开发。负责游戏内角色的动作设计和制作;游戏内怪物的动作设
|
||
计和制作,解决美术资源在程序引擎里的问题。 (次时代 U3DVR)
|
||
2015.10-----------------2016.8 武汉小嘿科技
|
||
在小嘿科技任动作师。任职期间参与了 U3D 手游《契约少女》
|
||
的研发。负责游戏角色的动作设计和制作;游戏角色的套装绑定,设
|
||
计并制作游戏登陆界面的动画;设计并制作游戏宣传视频的动画部
|
||
分;解决美术资源在引擎中的各种问题。 (U3D 虚拟现实)
|
||
2014.6------------------2015.7 深圳启点网络
|
||
在启点网络任动作师。任职期间参与了页游《神之王座》的研
|
||
发。负责游戏主角,怪物以及 NPC 和主角坐骑的动作设计和制作;游
|
||
戏主角套装装备的蒙皮绑定;导出资源并剪辑。后期开展 unity3d 手
|
||
游方面工作,深入的研究和掌握了 U3D 的使用技巧和完整的流程,摸
|
||
索了很多技巧性的东西,确保美术资源的可用,制作出了游戏 demo,
|
||
进入量产阶段。(页游和 U3D 手游)
|
||
2011.3-----------------2014.4 深圳中青宝
|
||
在中青宝红游中心任动作组长,任职期间负责游戏主角,怪物
|
||
以及 NPC 的动作设计和制作;游戏主角套装装备的蒙皮绑定;设计并
|
||
制作游戏登陆界面的动画;设计并制作游戏宣传视频的动画部分;制
|
||
作部分简单的光效;导出可用的模型和动作文件。(2D 端游和手游)
|
||
2010.5-----------------2011.3 广州白鹭龙翔
|
||
广州白鹭龙翔信息技术有限公司任游戏动作组长,任职期间只
|
||
要负责游戏主角,怪物以及 NPC 动作的设计和制作;游戏主角套装装
|
||
备蒙皮绑定;各种技术文档的制定,美术资源制作流程的制定并使其
|
||
流程化;解决美术于程序整合各种问题。(页游)
|
||
2009.7-------------------2010.4 武汉齐进
|
||
武汉齐进网络有限公司任游戏动作设计师,任职期间主要负责
|
||
游戏主角,怪物以及 NPC 动作的设计制作;游戏主角套装装备蒙皮绑
|
||
定;导出可用的模型文件和动作文件。(2.5D 端游)
|
||
2008.7-------------------2009.6 武汉创联
|
||
武汉创联科技新世纪有限公司任 3D 游戏动作设计师,任职期间
|
||
主要负责游戏主角,怪物以及 NPC 动作的设计制作;游戏主角套装装
|
||
备蒙皮绑定;游戏角色 NPC 模型的审核;导出可用的模型文件和动作
|
||
文件;并在 demo 中优化各项参数优化和修正模型资源的最终显示效
|
||
果。 (3D 端游)
|
||
资格认证:
|
||
获得由国家职业技能鉴定指导中心发的游戏设计与开发师
|
||
的技术培训合格证书
|
||
获得由 Autodesk 认证的动画工程师(I 级)资格证书
|
||
|
||
"""
|
||
# 测试简历2
|
||
test_str2 = """
|
||
段正隆
|
||
男 | 生日:2000.06 苏州 15802703200 2431918502@qq.com
|
||
求职意向: 软件开发 | 期望薪资:9-14K
|
||
个人优势
|
||
本人性格沉静,善于思考。擅长使用Python、MYSQL等工具进行程序的应用与开发;在学校多次带领计算机软件项目开发团
|
||
队,圆满完成学校和导师布置的计算机软件和物联网的各类项目开发,具有一定的团队管理和软件开发能力,能流畅阅读英
|
||
文文档,熟练使用英语进行软件开发。本人在工作中秉承热忱,专一,勇于奉献的精神,希望在人工智能、大数据、软件应
|
||
用及开发等专业方向发挥自己的能力。
|
||
教育经历
|
||
湖北工程学院 本科 物联网工程 2018-2022
|
||
计算机竞赛团队总负责人兼Python团队负责人
|
||
1.负责团队成员和项目开发进度的日常管理
|
||
2.代表项目开发团队与软件开发方进行协调沟通
|
||
3.负责团队各方面的技术架构、前端开发、后端开发,使用qt、Python、html进行前端的开发,使用java、Python进行后
|
||
端的开发和维护
|
||
4.负责各类项目功能的调试,维护
|
||
实习经历
|
||
武汉像素工坊动画传媒有限公司 Java 2019.06-2019.08
|
||
内容:
|
||
主要使用Java语言对公司产品进行后端维护
|
||
武汉红讯知识产权服务有限公司 知识产权/专利/商标代理人 2018.06-2018.08
|
||
内容:
|
||
1.负责公司客户渠道的开拓与维护
|
||
2.协助项目主管收集政府资助项目资料并整理、起草项目文案。
|
||
3.跟踪、预警公司项目进度进展
|
||
4.负责项目文件的归档及管理
|
||
项目经历
|
||
修仙游戏demo 全栈工程师 2022.02-至今
|
||
内容:
|
||
基于python的kivy模块开发windows、Android平台的前端,暂定利用python的flask模块开发游戏的服务器后端。
|
||
负责游戏前端画面的编写,游戏地图生成的脚本的编写,游戏前后端协议的编写以及实现,游戏后端的部署。
|
||
游戏玩法:
|
||
250000个单元格,玩家相当于一个单元格
|
||
进入地图地形或建筑就能互动
|
||
玩法包括:斗法(战斗),炼丹,炼器,采集,建造,自由买卖,拍卖
|
||
法宝:法器、灵器、仙器
|
||
品阶:黄阶、玄阶、地阶、天阶
|
||
修为等级:练气、筑基、结丹、金丹、元婴、化神、大乘
|
||
基于Python开发的安卓自习室系统 全栈开发工程师 2021.09-至今
|
||
内容:
|
||
基于Python的kivy模块,开发安卓app。 运用了MYSQL,requests请求,Linux环境下进行python文件的打包
|
||
功能包括但不限于:
|
||
1.登录注册,通过邮箱注册账号,注册账号需要填写账号和显示在外的名字
|
||
2.有多个自习室,进入每个自习室都能看到里面正在学习的小伙伴的名字和状态
|
||
3.好友系统,用户之间可以加好友,并且进入自习室之前可以快速加入好友所在自习室
|
||
4.进入自习室学习后会提醒设置学习计划,如学习多久,本次学习目标,并会将其保存在数据库,以便用户查看统计的数据
|
||
基于Python的flask模块,利用腾讯云的轻量级服务器和mysql,开发服务器后端。
|
||
物联网智能家居监控系统 前端开发工程师 2021.02-2021.12
|
||
内容:
|
||
运用技术:python的flask模块进行后端开发,kivy模块进行手机app的开发,利用requests请求以及Linux下python的打
|
||
包进行项目的开发。
|
||
利用目前因人工智能大火的python语言,在windows开发环境下,以cc2530为核心,利用Zigbee和串口通信技术,将湿
|
||
度、温度、烟雾、红外等传感器作为环境信息采集源,以串口控制为辅助,制作一个人工智能控制的智能家居监控系统。
|
||
学校实验室耗材管理系统 后端开发工程师 2020.06-2020.09
|
||
内容:
|
||
运用技术:利用html5以及JavaScript进行前端的开发,使用flask开发后端服务器,编写协议进行前后端交互。
|
||
师生通过访问系统app或者网页,向耗材管理员发送借用请求到管理员邮箱或短信,管理员同意以后发送信息到单片机开锁打
|
||
开。后台管理员可设置耗材管理员和师生信息。
|
||
负责软件方面前端后端的全部开发和维护,利用Python的kivy模块进行安卓app的开发,html5进行网页前端开发,Python
|
||
的flask模块进行后端的开发。
|
||
荣誉奖项
|
||
2021/6 第十二届蓝桥杯大赛软件类python组国赛优秀奖
|
||
2021/6 第十二届蓝桥杯大赛软件类python组省赛一等奖
|
||
2020/6 第十一届蓝桥杯大赛软件类python组国赛优秀奖
|
||
2020/6 第十一届蓝桥杯大赛软件类python组省赛一等奖
|
||
资格证书
|
||
计算机四级 大学英语四级
|
||
专业技能
|
||
python 熟练
|
||
office 熟练
|
||
c/c++ 一般
|
||
c# 一般
|
||
Java 一般
|
||
JavaScript 一般
|
||
HTML 一般
|
||
|
||
"""
|
||
fmt_txt(test_str2)
|