Day213(1),腾讯字节等大厂面试真题汇总

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

//调用方法查询

this.gotoPage(1)

},

//课程第一次查询

initCourseFirst() {

courseApi.getConditionPage(1, 8, this.searchObj).then((resp) => {

this.data = resp.data.data;

});

},

//查询所有一级分类

initSubject() {

courseApi.getAllSubject().then((resp) => {

this.subjectNestedList = resp.data.data.list;

// this.subSubjectList = resp.data.data.list.children

});

},

//分页切换方法

gotoPage(page) {

courseApi.getConditionPage(page, 8, this.searchObj).then((resp) => {

this.data = resp.data.data;

});

},

//点击某个一级分类,查询对应的二级分类

seacherOne(subjectParentId, index) {

//把传递来的index赋值给ondex,为了active样式生效

// this.oneIndex = index

// this.twoIndex = -1

// this.searchObj.subjectId=‘’

// this.subSubjectList=[]

//把一级分类点击的id值,赋值给searchObj

this.searchObj.subjectParentId = subjectParentId;

//点击某个一级分类进行条件查询

this.gotoPage(1);

//拿着点击的一级分类id 和 所有一级分类id进行比较

//如果id相同,从那个一级分类中获取他的二级分类

for (let i = 0; i < this.subjectNestedList.length; i++) {

//获取每个一级分类

var oneSubject = this.subjectNestedList[i];

//比较id是否相同

if (oneSubject.id == subjectParentId) {

this.subSubjectList = oneSubject.children;

}

}

},

//点击某个二级分类实现查询

searchTwo(subjectId, index) {

//把index赋值,为了样式生效

this.twoIndex = index;

//把二级分类点击id值,赋给searchObj

this.searchObj.subjectId = subjectId;

//点击某个二级分类进行调节查询

this.gotoPage(1);

},

},

created() {

//课程第一次查询

this.initCourseFirst();

//一级分类显示

this.initSubject();

},

};

3、页面

全部课程

课程类别

    • 全部

      v-for=“subjectNested in subjectNestedList”

      :key=“subjectNested.id”

      <a

      :title=“subjectNested.title”

      @click=“seacherOne(subjectNested.id, index)”

      href=“#”

      {{ subjectNested.title }}</a

      • <a

        :title=“subject.title”

        @click=“searchTwo(subject.id, index)”

        href=“#”

        {{ subject.title }}</a

        1/

        1

        1. <a

          title=“销量”

          href=“javascript:void(0);”

          @click=“searchBuyCount()”

          销量

        2. <a

          title=“最新”

          href=“javascript:void(0);”

          @click=“searchGmtCreate()”

          最新

        3. <a

          title=“价格”

          href=“javascript:void(0);”

          @click=“searchPrice()”

          价格 

           

          <span class=“c-666 fsize14 ml10 vam”

          没有相关数据,小编正在努力整理 中…</span

          • <img

            :src=“item.cover”

            class=“img-responsive”

            :alt=“item.title”

            />

            <a

            href=“/course/1”

            title=“开始学习”

            class=“comm-btn c- btn-1”

            开始学习</a

            <a

            href=“/course/1”

            :title=“item.title”

            class=“course-title fsize18 c-333”

            {{ item.title }}</a

            <span

            class=“fr jgTag bg-green”

            v-if=“Number(item.price) === 0”

            免费

            9634人学习

            |

            9634评论

            <a

            :class=“{ undisable: !data.hasPrevious }”

            href=“#”

            title=“首页”

            @click.prevent=“gotoPage(1)”

            首</a

            <a

            :class=“{ undisable: !data.hasPrevious }”

            href=“#”

            title=“前一页”

            @click.prevent=“gotoPage(data.current - 1)”

            <</a

            <a

            v-for=“page in data.pages”

            :key=“page”

            :class="{

            current: data.current == page,

            undisable: data.current == page,

            }"

            :title=“‘第’ + page + ‘页’”

            href=“#”

            @click.prevent=“gotoPage(page)”

            {{ page }}</a

            <a

            :class=“{ undisable: !data.hasNext }”

            href=“#”

            title=“后一页”

            @click.prevent=“gotoPage(data.current + 1)”

            ></a

            <a

            :class=“{ undisable: !data.hasNext }”

            href=“#”

            title=“末页”

            @click.prevent=“gotoPage(data.pages)”

            末</a

            4、测试

            image-20210307160824389


            课程详情页

            ===============================================================

            一、后端部分


            • controller

            com.achang.eduservice.controller.front.CourseFrontController

            @RestController

            @CrossOrigin

            @RequestMapping(“/eduservice/courseFront”)

            public class CourseFrontController {

            @Autowired

            private EduCourseService eduCourseService;

            @Autowired

            private EduChapterService eduChapterService;

            //课程详情的方法

            @GetMapping(“/getFrontCourseInfo/{courseId}”)

            public R getFrontCourseInfo(@PathVariable String courseId){

            //根据课程id,编写sql语句查询课程信息

            CourseWebVo courseWebVo = eduCourseService.getBaseCourseInfo(courseId);

            //根据课程id,查询章节和小节信息

            List chapterVideoList = eduChapterService.getChapterVideoByCourseId(courseId);

            return R.ok().data(“courseWebVo”,courseWebVo).data(“chapterVideoList”,chapterVideoList);

            }

            }

            • service

            接口

            //前台根据课程id,查询课程基础信息

            CourseWebVo getBaseCourseInfo(String courseId);

            Impl

            //前台根据课程id,查询课程基础信息

            @Override

            public CourseWebVo getBaseCourseInfo(String courseId) {

            return baseMapper.getBaseCourseInfo(courseId);

            }

            • dao

            EduCourseMapper接口

            @Component

            public interface EduCourseMapper extends BaseMapper {

            //前台根据课程id,查询课程基础信息

            CourseWebVo getBaseCourseInfo(String courseId);

            }

            Impl实现类xml文件

            SELECT

            ec.id,

            ec.title,

            ec.cover,

            ec.lesson_num AS lessonNum,

            ec.price,

            ec.cover,

            ec.buy_count as buyCount,

            ec.view_count as viewCount,

            esd.description,

            s1.title AS subjectLevelOne,

            s1.id as subjectLevelOneId,

            s2.id as subjectLevelTwoId,

            s2.title AS subjectLevelTwo,

            t.name AS teacherName,

            t.id as teacherId,

            t.avatar,

            t.intro

            FROM

            edu_course ec

            LEFT JOIN edu_teacher t ON ec.teacher_id = t.id

            LEFT JOIN edu_subject s1 ON ec.subject_parent_id = s1.id

            LEFT JOIN edu_subject s2 ON ec.id = s2.id

            left join edu_course_description esd on ec.id = esd.id

            WHERE

            ec.id = #{id}

            • 记得要指定xml配置文件配置,在properties配置文件中

            #配置mapper xml文件的路径

            mybatis-plus.mapper-locations=classpath:com/achang/eduservice/mapper/xml/*.xml

            • 测试

            image-20210307175018878


            二、前端部分


            • api

            guli-front\api\course.js

            import request from ‘@/utils/request’

            export default{

            //根据课程id,查询课程详细信息

            getFrontCourseInfo(courseId){

            return request({

            url: /eduservice/courseFront/getFrontCourseInfo/${courseId},

            method: ‘get’

            })

            }

            }

            • 页面js脚本

            pages/course/_id.vue

            • 页面html

            首页

            \

            {{

            course.subjectLevelOne

            }}

            \

            {{ course.subjectLevelTwo }}

            <img

            :src=“course.cover”

            :alt=“course.title”

            class=“dis c-v-pic”

            height=“355px”

            width=“630px”

            />

            {{ course.title }}

            价格:

            <b class=“c-yellow” style=“font-size: 24px”

            ¥{{ course.price }}</b

            <span class=“c-fff fsize14”

            主讲: {{ course.teacherName }}   </span

            收藏

            <a href=“#” title=“立即观看” class=“comm-btn c-btn-3”

            立 即 观 看</a

              •  

                销量


                {{ course.buyCount }}
              •  

                课时数


                {{ course.lessonNum }}
              •  

                浏览数


                {{ course.viewCount }}

                id=“c-i-tabTitle”

                class=“c-infor-tabTitle c-tab- title”

                课 程 详 情

                课程介绍

                {{ course.description }}

                课程大纲

                • <a

                  href=“javascript: void(0)”

                  :title=“chapter.title”

                  class=“current-1”

                  {{chapter.title}}

                  1. 免费试听

                     </em

                    {{video.title}}

                    主讲讲师

                    • <img

                      :src=“course.avatar”

                      width=“50”

                      height=“50”

                      alt

                      />

                      {{course.teacherName}}

                      {{course.intro}}

                      • 测试效果

                      image-20210307192514608


                      阿里云视频播放测试

                      ===================================================================

                      一、获取播放地址播放


                      获取播放地址

                      参考文档: https://help.aliyun.com/document_detail/61064.html

                      前面的 03-使用服务端SDK 介绍了如何获取非加密视频的播放地址。直接使用03节的例子获取加密视频播放地址会返回如下错误信息

                      image-20210307192626775

                      因此在testGetPlayInfo 测试方法中 添加 ResultType 参数,并设置为true

                      privateParams.put(“ResultType”, “Multiple”);

                      此种方式获取的视频文件不能直接播放,必须使用阿里云播放器播放

                      二、视频播放器


                      参考文档: https://help.aliyun.com/document_detail/61109.html

                      1 、视频播放器介绍

                      阿里云播放器 SDK ( ApsaraVideo Player SDK )是阿里视频服务的重要一环,除了支持点播和直播的基

                      础播放功能外,深度融合视频云业务,如支持视频的加密播放、安全下载、清晰度切换、直播答题等业

                      务场景,为用户提供简单、快速、安全、稳定的视频播放服务。

                      2 、集成视频播放器

                      参考文档: https://help.aliyun.com/document_detail/51991.html

                      参考 【播放器简单使用说明】一节

                      引入脚本文件和 css 文件

                      href=“https://g.alicdn.com/de/prismplayer/2.8.1/skins/default/aliplayer-min.css” />

                      初始化视频播放器

                      3、播放地址播放

                      在 Aliplayer 的配置参数中添加如下属性

                      //播放方式一:支持播放地址播放,此播放优先级最高,此种方式不能播放加密视频

                      source : ‘你的视频播放地址’,

                      启动浏览器运行,测试视频的播放

                      image-20210307194213744

                      • 效果

                      image-20210307194230586

                      4 、播放凭证播放(推荐)

                      阿里云播放器支持通过播放凭证自动换取播放地址进行播放,接入方式更为简单,且安全性更高。播放

                      凭证默认时效为100秒(最大为3000秒),只能用于获取指定视频的播放地址,不能混用或重复使用。

                      如果凭证过期则无法获取播放地址,需要重新获取凭证。

                      encryptType:‘1’,//如果播放加密视频,则需设置encryptType=1,非加密视频无需设置此项

                      vid : ‘视频id’,

                      playauth : ‘视频授权码’,

                      注意:播放凭证有过期时间,默认值:100秒 。取值范围:100~3000。

                      设置播放凭证的有效期

                      在获取播放凭证的测试用例中添加如下代码

                      request.setAuthInfoTimeout(200L);

                      在线配置参考:https://player.alicdn.com/aliplayer/setting/setting.html

                      image-20210307201320308


                      整合阿里云视频播放器

                      ====================================================================

                      一、后端接口


                      • VodController

                      //根据视频id获取视频凭证

                      @GetMapping(“/getPlayAuth/{id}”)

                      public R getPlayAuth(@PathVariable String id){

                      try {

                      String playAuth = vodService.getPlayAuth(id);

                      return R.ok().data(“PlayAuth”,playAuth);

                      } catch (Exception e) {

                      e.printStackTrace();

                      throw new AchangException(20001,“获取视频凭证失败”);

                      }

                      }

                      • service

                      接口

                      //根据视频id获取视频凭证

                      String getPlayAuth(String id);

                      impl

                      //根据视频id获取视频凭证

                      @Override

                      public String getPlayAuth(String id) {

                      String accesskeyId = ConstantVodUtils.ACCESSKEY_ID;

                      String accesskeySecret = ConstantVodUtils.ACCESSKEY_SECRET;

                      try {

                      //创建初始化对象

                      DefaultAcsClient cl = InitObject.initVodClient(accesskeyId,accesskeySecret);

                      //创建获取视频地址request对象和response对象

                      GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();

                      //向request对象设置视频id值

                      request.setVideoId(id);

                      GetVideoPlayAuthResponse response = cl.getAcsResponse(request);

                      //获取视频播放凭证

                      return response.getPlayAuth();

                      } catch (ClientException e) {

                      e.printStackTrace();

                      throw new AchangException(20001,“获取视频凭证失败”);

                      }

                      }

                      • ConstantVodUtils

                      @Component

                      public class ConstantVodUtils implements InitializingBean {

                      @Value(“${aliyun.vod.file.keyid}”)

                      private String accessKeyId;

                      @Value(“${aliyun.vod.file.keysecret}”)

                      private String accessKeySecret;

                      public static String ACCESSKEY_ID;

                      public static String ACCESSKEY_SECRET;

                      @Override

                      public void afterPropertiesSet() throws Exception {

                      ACCESSKEY_ID = this.accessKeyId;

                      ACCESSKEY_SECRET = this.accessKeySecret;

                      }

                      }

                      • InitObject

                      //初始化类

                      public class InitObject {

                      public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {

                      String regionId = “cn-shanghai”; // 点播服务接入区域

                      DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);

                      DefaultAcsClient client = new DefaultAcsClient(profile);

                      return client;

                      }

                      }

                      网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

                      需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
                      img

                      一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
                      sskeyId = ConstantVodUtils.ACCESSKEY_ID;

                      String accesskeySecret = ConstantVodUtils.ACCESSKEY_SECRET;

                      try {

                      //创建初始化对象

                      DefaultAcsClient cl = InitObject.initVodClient(accesskeyId,accesskeySecret);

                      //创建获取视频地址request对象和response对象

                      GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();

                      //向request对象设置视频id值

                      request.setVideoId(id);

                      GetVideoPlayAuthResponse response = cl.getAcsResponse(request);

                      //获取视频播放凭证

                      return response.getPlayAuth();

                      } catch (ClientException e) {

                      e.printStackTrace();

                      throw new AchangException(20001,“获取视频凭证失败”);

                      }

                      }

                      • ConstantVodUtils

                      @Component

                      public class ConstantVodUtils implements InitializingBean {

                      @Value(“${aliyun.vod.file.keyid}”)

                      private String accessKeyId;

                      @Value(“${aliyun.vod.file.keysecret}”)

                      private String accessKeySecret;

                      public static String ACCESSKEY_ID;

                      public static String ACCESSKEY_SECRET;

                      @Override

                      public void afterPropertiesSet() throws Exception {

                      ACCESSKEY_ID = this.accessKeyId;

                      ACCESSKEY_SECRET = this.accessKeySecret;

                      }

                      }

                      • InitObject

                      //初始化类

                      public class InitObject {

                      public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {

                      String regionId = “cn-shanghai”; // 点播服务接入区域

                      DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);

                      DefaultAcsClient client = new DefaultAcsClient(profile);

                      return client;

                      }

                      }

                      网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

                      需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
                      [外链图片转存中…(img-5umhGPka-1713122639453)]

                      一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

                  • 24
                    点赞
                  • 26
                    收藏
                    觉得还不错? 一键收藏
                  • 0
                    评论
                  评论
                  添加红包

                  请填写红包祝福语或标题

                  红包个数最小为10个

                  红包金额最低5元

                  当前余额3.43前往充值 >
                  需支付:10.00
                  成就一亿技术人!
                  领取后你会自动成为博主和红包主的粉丝 规则
                  hope_wisdom
                  发出的红包
                  实付
                  使用余额支付
                  点击重新获取
                  扫码支付
                  钱包余额 0

                  抵扣说明:

                  1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                  2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                  余额充值