2022年学习和实习总结——收获颇多(未完待续...)

news2024/11/30 14:25:49

0 序言        

        时间已经进入了2023年,今年将是属于我们这一届秋招的一年。回顾2022年的学习和实习历程,我觉得今年的收获还是不少的,甚至可以说是整个高等教育生涯中,收获最多的一年。

1 学习情况总结

1.1 读书和学习总结

        原来按照本科毕业那年既定的计划来看的话,我是打算转Java的。不过,今年2023届秋招Java岗的情况似乎不容乐观,身边好多我觉得能力出众的Java大佬都铩羽而归,最终只去了一些中厂和外资,这些开出的工资和大厂还是有一定差距的,着实惋惜。

        于是,我也就只能减少了投入到学习Java中的时间,打算重新回归C/C++。2022年年初,精力几乎都投入到了java的学习中去了,读完了《Head First Java》和《java核心技术》卷I和卷II的主要部分,并结合《疯狂spring boot终极讲义》以及springboot实战三剑客系列的书,系统的学习了一遍ssm。

        虽然之前也写过一些java的项目,但无非是淘宝接单群里的那种学生课设,那会还真没有接触过企业级的java开发,对于一些java的八股文也有所欠缺,所以主要补的是基础知识。随着4,5月暑期实习简历的投递,以及今年9月秋招的到来,互联网行情变差的问题也显露出来,尤其Java,已经不是2020年那会,来人就给offer的境遇了,于是我把目光重新转向了C++。

        我自以为自己C++的基础还是可以的,实习经历也有一段(虽然是名不见经传的小单位)。该单位属于制造业,是做变电器的,我们工作的是为变电器开发一个控制软件,用于控制变电器的电压等参数。具体做的是Qt开发,和写套接字编程向后端发送命令以控制变电器设备。

        关于C++的学习,大致是阅读完了之前本科时期没有读完的两本久仰大名的书,是侯捷翻译的《Essential C++》和《Effective C++》。

1.2 竞赛情况总结

        今年参加了3场数学建模类的竞赛,分别是美国数学建模比赛(MCM)、mathorCup和五一赛。参加五一赛和mathorCup原本是为了防止MCM铩羽而归,导致之前为比赛做的准备泡汤。于是,我在参加完MCM后,又参加了mathorCup和五一杯。最终MCM比赛结果出乎预料,拿了M奖。美赛是数学建模领域最权威的比赛,也是唯一权威的全球性赛事,且M奖获奖率在5-7%,这个结果确实是令人心满意足。就这样,我算是圆满的结束了高等教育阶段的比赛生涯,彻底AFK了。

2 秋招准备 

        2023年是24届应届生的主战场,尤其是3-4月份的暑期实习招聘,是秋招之前竞争最为惨烈的战场。到目前为止,我复习完了计网和操作系统的八股文,由于当年考过CCNA的缘故,我有一定的底子,计算机网络的复习速度还是挺快的。截止到目前,我刚刚完成了计算机网络和操作系统两门专业课的复习,接着就准备开始复习数据结构的面试题了。

3 2022年实习总结

今年一共在三个单位实习,3-6月是研一下学期。很不幸,苏州因为疫情静默,哈尔滨随后也因为疫情静默,因此并没有去学校,而是呆在家中学习,也籍此获得了两个实习机会。

3.1 在上海元星制药的实习

         在我在元星制药的工号是P004,即全部门的第4号实习员工,我是在公司组建之初加入的。一开始,我在BOSS直聘上收到我司的面试邀请,我想着用来增加面试经验也是不错的,于是就接受了HR的面试邀请,出乎意料的是,面试官给出的题目都比较对我胃口,然后我笔试和面试都比较顺利,于是顺利通过了。HR开出了200/天的薪资,而且支持远程办公(当时上海正处于静默),我想着我一边上网课一边实习能拿学位证还能增加实习经历还能赚钱,这岂不美哉!入职!

        入职之后发现单位领导和同事都是很NICE的,公司学历门槛很高,全部门就我一个211,其他实习同学以华五居多(尤其是复旦和交大),再不济也是个985,除此之外就是MIT之类的美国名校,第一次能和这么多大佬们一起上班还是很激动的。由于加入时间较早,我们组的组长也是部门领导,他是个和蔼可亲的人,真就手把手教人,对于个人能力提升确实很大,我真是感激。我们组主要负责基础设施的建设,例如elasticsearch、neo4j和airflow,这三个是第一阶段的工作任务,第二阶段是搭建Hadoop以供后期Flink使用。

    在这里我不得不对之前没有来得及写的实习总结做一个补充。在文章实习小结·改进代码(解决爆栈问题)icon-default.png?t=MBR7https://blog.csdn.net/qq_41938259/article/details/123914290?spm=1001.2014.3001.5501中,我讲述了我在EC2服务器上运行python脚本时遇到out of menory问题的解决方案。由于xml文件较大,一次性提取所有数据加载到内存中,引发爆栈使得linux内核kill了python进程,进而引发out of menory问题。我当初得想法是一条一条数据发,确实是解决的报站问题,但是领导第二天就和我说,你一条条发,反复建立连接断开连接,会大量消耗服务器资源的,等同于在DDOS攻击。我想了下,确实是如此,进而改为每5000条数据发一次(每个xml文件的数据量大致是百万级的)。实现方式就是加一个变量cnt并初始化为0,每清洗一条数据就让cnt自增,当cnt==5000时或者文件读到尾时,便将数据发送一次。代码修改后如下:

import logging
from lxml import etree
from elasticsearch import Elasticsearch
 
 
# get data from xml file
def get_data(address):
    xml = etree.parse(address)
    root = xml.getroot()
    datas = root.xpath('//PubmedArticle/MedlineCitation')
    es = Elasticsearch(hosts=['http://localhost:9200'])

    // cnt是计数器     
    cnt = 0
    // data_size是data的总长度
    data_size = len(data)
    for data in datas:
        // 每一条数据,cnt自增一次
        cnt += 1
        # print(data)
        if len(data.xpath('./DateCompleted')) != 0:
            year = data.xpath('./DateCompleted/Year/text()')[0]
            month = data.xpath('./DateCompleted/Month/text()')[0]
            day = data.xpath('./DateCompleted/Day/text()')[0]
            Date = month+'-'+day+'-'+year
            # print(Date)
            date_completed = Date
        else:
            date_completed = 'NULL'
 
        year = data.xpath('./DateRevised/Year/text()')[0]
        month = data.xpath('./DateRevised/Month/text()')[0]
        day = data.xpath('./DateRevised/Day/text()')[0]
        Date = month + '-' + day + '-' + year
        date_revised = Date
 
        if len(data.xpath('./Article/Journal/ISSN/text()')) != 0:
            issn = data.xpath('./Article/Journal/ISSN/text()')[0]
            # print(issn)
            ISSN = issn
        else:
            ISSN = 'NULL'
 
        id = data.xpath('./PMID/text()')[0]
        if id != '':
            ID = id
        else:
            ID = 'NULL'
 
        if len(data.xpath('./parent::*/PubmedData/ArticleIdList/ArticleId[@IdType="doi"]/text()')) != 0:
            doi = data.xpath('./parent::*/PubmedData/ArticleIdList/ArticleId[@IdType="doi"]/text()')[0]
            # print(doi)
            DOI = doi
        else:
            DOI = '0'
 
        title = data.xpath('./Article/ArticleTitle/text()')
        if len(title) != 0:
            # print(title)
            Title = title[0]
        else:
            Title = 'NULL'
 
        Abstract = data.xpath('./Article/Abstract/AbstractText/text()')
        if len(Abstract) == 1:
            AbstractList = Abstract[0]
            # print(Abstract)
        elif len(Abstract) == 0:
            AbstractList = 'NULL'
        else:
            length = len(Abstract)
            # print(length)
            AbstractString = ''
            for tmp in Abstract:
                AbstractString.join(tmp)
            # Abstract = data.xpath('./Article/Abstract/AbstractText/text()')[0]
            # Abstract = data.xpath('./Article/Abstract/AbstractText[@Label="BACKGROUND"]/text()')[0]
            AbstractList = AbstractString
            # print(AbstractString)
 
        authorLastName = data.xpath('./Article/AuthorList/Author/LastName/text()')
        authorForeName = data.xpath('./Article/AuthorList/Author/ForeName/text()')
        authorName = []
        if len(authorForeName) != 0 and len(authorLastName) != 0 and len(authorForeName) == len(authorLastName):
            for i in range(len(authorLastName)):
                authorName.append(authorForeName[i] + ' ' + authorLastName[i] + ',')
            # print(authorName)
            Names = "".join(authorName)
 
        else:
            Names = "NULL"
 
        jsonData = {
            "title": Title,
            "Authors": Names,
            "abstract": AbstractList,
            "date": {
                "completed_date": date_completed,
                "revised_date": date_revised,
            },
            "journal_issn": ISSN,
            "journal_doi": DOI,
            "article_id": ID
        }
 
        // 当cnt为5000时发送数据,这样既不会爆栈也不会变成DDOS攻击
        // 当然读到文件结尾时,即使不满5000也需要发送数据,故cnt == data_size
        if cnt == 5000 || cnt == data_size:
            index_name = "pubmed-paper-index"
            es.index(index=index_name, body=jsonData)
 
 
if __name__ == '__main__':
 
    # List of pending documents
    address = []
    path1 = "pubmed22n"
    path2 = ".xml.gz"
    path = ''
    for i in range(715, 1115):
        if i >0 and i <= 9:
            path = path1 + '000' + str(i) +path2
            address.append(path)
        elif i >= 10 and i<= 99:
            path = path1 + '00' + str(i) + path2
            address.append(path)
        elif i >= 100 and i <= 999:
            path = path1 + '0' + str(i) + path2
            address.append(path)
        else:
            path = path1 + str(i) + path2
            address.append(path)
 
    # process the file
    for add in address:
        get_data(add)
        logging.basicConfig()
        logger = logging.getLogger(__name__)
        logger.setLevel(logging.INFO)
        logger.info(add + f"finished!")
 
 
 
 
 

        第二个问题,仍然是在以上的场景中,不过是我做完了自动化脚本后才有的。自动化脚本的文章介绍在这里:

实习工作小结——下载和导入Elasticsearch模块实现自动比对的功能icon-default.png?t=MBR7https://timtian.blog.csdn.net/article/details/124319573?spm=1001.2014.3001.5502

        问题在于,当python进程被KILL时,如果重新导入该文件比然会很耗时,怎么从断开的地方重新写入?很明显try-except语句是无法处理的,原因是进程都被kill掉了,try-except语句就无法继续执行了。这里的解决方案是使用日志,在每次遍历的时候,将主键pmid覆盖输出到日志文件,于是自动化脚本重新执行时增加参数,代码中使用sys.argv[]用来接收命令行中参数,用以判断是否是之前断开后重新进行的。是的话,脚本会读取日志文件获得pmid的值,于是便从与该pmid一致的数据开始,进行写入操作。此时,问题便被解决了。

        第三个事情是,重做了前端检索页面,原来我展示的前端是这样的:为基于elasticsearch和flask的web端检索系统增加新的检索功能icon-default.png?t=MBR7https://timtian.blog.csdn.net/article/details/125389132?spm=1001.2014.3001.5502前端写的肉眼可见的糟糕。本来准备写一篇博客来介绍的,结果事情有点多,到离职之后都没来得及写,于是就这么被耽搁了,原来项目的github仓库是私有的,于是写下载不到代码,这里就不加展示了,敬请谅解。

3.2 在上海星环科技的实习

未完待续...

4 结语

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152248.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】项目构建自动化工具——make和makefile

make 和 makefile1.背景2. 利用make和makefile简单编译一个源文件3.使用方法解释4.执行原理5.项目清理1.背景 &#xff08;1&#xff09;一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff…

智能驾驶视觉传感器测试:自动驾驶车辆如何进行传感器标定?

为什么要进行标定&#xff1f;一辆自动驾驶车辆会安装多个传感器&#xff0c;需要通过传感器标定来确定相互之间的坐标关系&#xff0c;从而将多个传感器数据整合为“一个传感器”。因此&#xff0c;准确的传感器标定是实现智能车辆多传感器感知和定位系统的先决条件。传感器标…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《6》

我们在看Faster R-CNN源码(MXNet版本)的时候&#xff0c;除了下面这些我们遇到的常见的参数解析 import argparse import ast parser argparse.ArgumentParser(descriptionDemonstrate a Faster R-CNN network,formatter_classargparse.ArgumentDefaultsHelpFormatter) parse…

【操作系统系统/Golang】实验5:磁盘调度(FCFS,SSTF,SCAN与循环SCAN)

1 实验问题描述设计程序模拟先来先服务FCFS&#xff0c;最短寻道时间优先SSTF&#xff0c;SCAN和循环SCAN算法&#xff08;对应其他参考书的LOOK和C-LOOK&#xff09;的工作过程。假设有trackNum个磁道号所组成的磁道访问序列&#xff0c;给定开始磁道号initTrackNum和磁头移动…

Java项目管理工具:Maven介绍

Maven 简介下载与环境配置Maven仓库仓库类型本地仓库配置简介 Maven ,一款跨平台的项目管理工具。它主要服务于基于 Java 平台的项目构建与依赖管理。即可以将项目的开发和管理过程抽象成一个项目对象模型(POM),开发人员只需要做一些简单的配置,Maven 便可自动完成项目构建…

HRNet源码阅读笔记(4),庞大的PoseHighResolutionNet模块-stage1

一、图和代码上一讲的图中&#xff0c;有stage1图例如下;关键是看pose_hrnet.py中PoseHighResolutionNet模块的forward函数相关部分如下&#xff1a;def forward(self, x):x self.conv1(x)x self.bn1(x)x self.relu(x)x self.conv2(x)x self.bn2(x)x self.relu(x)x self…

一辈子干好一件事,你就了不起

人生的道路和轨迹&#xff0c;就像是射出去的箭。假如左拐右拐&#xff0c;不但不能射中靶心&#xff0c;达不到目标&#xff0c;还有可能拐弯回到原点&#xff0c;原地踏步。日复一日&#xff0c;年复一年&#xff0c;没有成长和收获&#xff0c;这很可怕。 短暂的2022年&…

设计测试用例的万能公式 + 6大具体方法 = 面试就像聊天?

目录 一、设计测试用例的万能公式 二、设计测试用例的具体方法 2.1、等价类 2.2、边界值 2.3、判定表&#xff08;因果图的另一种形式&#xff09; 2.4、场景设计法 2.5、正交法&#xff08;用的少&#xff0c;基本不可见&#xff09; 2.4.1、使用allparis构建正交表 2.…

算法之动态规划理论

目录 前言 一个模型三个特征理论讲解 1.最优子结构 2.无后效性 3.重复子问题 一个模型三个特征实例剖析 两种动态规划解题思路总结 1.状态转移表法 2.状态转移方程法 四种算法思想比较分析 总结&#xff1a; 参考资料 前言 本篇博文主要讲解动态规划的理论&am…

行业分析| 交通综合执法对讲系统

随着社会的经济发展&#xff0c;人口的增加城市的不断壮大&#xff0c;城市交通情况越来越复杂&#xff0c;交警承担的执法任务越来越重&#xff0c;通信作为交警综合执法对讲调度的重要组成部分&#xff0c;也随之提出了更高的要求。综合执法对讲系统的出现使执法变得高效规范…

【Redis】高级进阶

&#x1f31f;个人博客&#xff1a;www.hellocode.top&#x1f31f; &#x1f31f;Java知识导航&#xff1a;Java-Navigate&#x1f31f; ⭐想获得更好的阅读体验请前往Java-Navigate &#x1f525;本文专栏&#xff1a;《流行框架》 &#x1f31e;如没有JavaWEB基础&#xff0…

【ZooKeeper】第三章 集群搭建

【ZooKeeper】第三章 集群搭建 文章目录【ZooKeeper】第三章 集群搭建一、ZooKeeper 集群介绍1.Leader 选举2.集群角色二、搭建 ZooKeeper 集群1.安装2.配置集群3.启动集群三、故障模拟一、ZooKeeper 集群介绍 1.Leader 选举 Serviceid&#xff1a;服务器 ID 比如有三台服务器…

分享84个NET源码,总有一款适合您

分享84个NET源码&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1r7_yrTfQrg-5whL7AYJiLA?pwdeem6 提取码&#xff1a;eem6 import os from time import sleepimport requests from bs4 import BeautifulSoup from docx import Document from docx.sh…

iOS ReplayKit 屏幕共享,屏幕直播实现

使用replayKit iOS12 之后相关 api 完成系统/app 内 屏幕采集直播视频数据, 采用 socket进行进程间Broadcast Unload Extension 向 宿主 app 传输数据, 后台保活持续采集屏幕数据, 摄像头采集, 数据编码解码 编译环境 Xcode14.2, iOS12 系统屏幕数据采集app 内屏幕共享使用so…

FPGA与数字IC求职知识准备 - 数字电路知识总结

前言 本文整理了数字电路课程中的相关基本的知识点和较为重要的知识点&#xff0c;用于求职的数电部分的知识准备&#xff0c;差缺补漏。 二进制数的算术运算 无符号二进制数的算术运算 加法&#xff1a;同十进制加法&#xff0c;逢二进一&#xff0c;无符号二进制数的加法…

Redis源码篇(8)——集群模式

1、集群模式的启动和初始化 当开启了cluster-enabled&#xff0c;在初始化服务initServer方法中会调用clusterInit方法将redis带入cluster模式。 clusterInit void clusterInit(void) {int saveconf 0;//初始化clusterState结构 server.cluster zmalloc(sizeof(clusterSta…

LaTeX代码宏包listings的使用

LaTeX代码宏包listings的使用 文章目录LaTeX代码宏包listings的使用1 需求2 verbatim环境简介3 listings设置代码高亮4 代码样式和颜色5 为listings添加题注6 listings支持的语言格式7 附录 listings样式的自定义参数1 需求 LaTeX\LaTeXLATE​X适合用来进行结构化文档的编辑。如…

[5]. 最长回文子串

[5]. 最长回文子串题目算法设计&#xff1a;双指针算法设计&#xff1a;Manacher 算法题目 传送门&#xff1a;https://leetcode.cn/problems/longest-palindromic-substring/ 算法设计&#xff1a;双指针 检查回文串的通用解决方案是&#xff0c;双指针。 寻找回文串的思…

什么是地理围栏

一、地理围栏算法简介 地理围栏&#xff08;Geo-fencing&#xff09;是LBS的一种典型应用&#xff0c;就是用一个虚拟的栅栏围出一个虚拟地理边界。地理围栏更侧重于对区域边界的界定&#xff0c;不再是以某点为圆心向外等距离画圆&#xff0c;而是准确勾勒出小区、写字楼等特…

wpf实现FFmpeg获取摄像头实时画面

gitee地址如下源码地址如何获取摄像头验证码和ip首先获取摄像头底部的验证码及ip(测试使用的是萤石摄像头&#xff0c;需要PC下载萤石客户端查看ip)未连接之前可以通过VLC进行测试在左上角&#xff08;媒体&#xff09;--》&#xff08;流&#xff09;--》&#xff08;网络&…