Tiny'Wo | 小窝

网络中的一小块自留地

面试官:说说你对微信小程序的理解?优缺点�?

一、是什�?

2017年,微信正式推出了小程序,允许外部开发者在微信内部运行自己的代码,开展业�?
截至目前,小程序已经成为国内前端的一个重要业务,�?Web 和手�?App 有着同等的重要�?

小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用

也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载

注意的是,除了微信小程序,还有百度小程序、微信小程序、支付宝小程序、抖音小程序,都是每个平台自己开发的,都是有针对性平台的应用程序

二、背�?

⼩程序并⾮凭空冒出来的⼀个概念,当微信中�?WebView 逐渐成为移动 Web的⼀个重要⼊⼝时,微信就有相关的 JS-SDK

JS-SDK 解决了移动⽹⻚能⼒不⾜的问题,通过暴露微信的接⼝使�?Web 开发者能够拥有更多的能⼒,然⽽在更多的能⼒之外,JS-SDK的模式并没有解决使⽤移动⽹⻚遇到的体验不良的问题

因此需要设计⼀个⽐较好的系统,使得所有开发者在微信中都能获得⽐较好的体验:

  • 快速的加载
  • 更强⼤的能⼒
  • 原⽣的体�?- 易⽤且安全的微信数据开�?- ⾼效和简单的开�?
    这些是JS-SDK做不到的,需要设计一个全新的小程序系�?
    对于小程序的开发,提供一个简单、高效的应用开发框架和丰富的组件及API,帮助开发者开发出具有原生体验的服�?
    其中相比H5,小程序与其的区别有如下�?- 运⾏环境:⼩程序基于浏览器内核重构的内置解析�?- 系统权限:⼩程序能获得更多的系统权限,如⽹络通信状态、数据缓存能⼒等
  • 渲染机制:⼩程序的逻辑层和渲染层是分开�?
    小程序可以视为只能用微信打开和浏览的H5,小程序和网页的技术模型是一样的,用到的 JavaScript 语言�?CSS 样式也是一样的,只是网页的 HTML 标签被稍微修改成�?WXML 标签

因此可以说,小程序页面本质上就是网页

其中关于微信小程序的实现原理,我们在后面的文章讲�?

三、优缺点

优点�?- 随搜随用,用完即走:使得小程序可以代替许多APP,或是做APP的整体嫁接,或是作为阉割版功能的承载�?- 流量大,易接受:小程序借助自身平台更加容易引入更多的流�?- 安全

  • 开发门槛低
  • 降低兼容性限�?

缺点�?

  • 用户留存:及相关数据显示,小程序的平均次日留存在13%左右,但是双周留存骤降到仅有1%
  • 体积限制:微信小程序只有2M的大小,这样导致无法开发大型一些的小程�?- 受控微信:比起APP,尤其是安卓版的高自由度,小程序要面对很多来自微信的限制,从功能接口,甚至到类别内容,都要接受微信的管控

参考文�?

面试官:说说微信小程序的生命周期函数有哪些?

一、是什�?

vuereact框架一样,微信小程序框架也存在生命周期,实质也是一堆会在特定时期执行的函数

小程序中,生命周期主要分成了三部分:

  • 应用的生命周�?- 页面的生命周�?- 组件的生命周�?

应用的生命周�?

小程序的生命周期函数是在app.js里面调用的,通过App(Object)函数用来注册一个小程序,指定其小程序的生命周期回调

页面的生命周�?

页面生命周期函数就是当你每进�?切换到一个新的页面的时候,就会调用的生命周期函数,同样通过App(Object)函数用来注册一个页�?

组件的生命周�?

组件的生命周期,指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发,通过Component(Object)进行注册组件

二、有哪些

应用的生命周�?

生命周期 说明
onLaunch 小程序初始化完成时触发,全局只触发一�?
onShow 小程序启动,或从后台进入前台显示时触�?
onHide 小程序从前台进入后台时触�?
onError 小程序发生脚本错误或 API 调用报错时触�?
onPageNotFound 小程序要打开的页面不存在时触�?
onUnhandledRejection() 小程序有未处理的 Promise 拒绝时触�?
onThemeChange 系统切换主题时触�?

页面的生命周�?

生命周期 说明 作用
onLoad 生命周期回调—监听页面加�? 发送请求获取数�?
onShow 生命周期回调—监听页面显�? 请求数据
onReady 生命周期回调—监听页面初次渲染完�? 获取页面元素(少用)
onHide 生命周期回调—监听页面隐�? 终止任务,如定时器或者播放音�?
onUnload 生命周期回调—监听页面卸�? 终止任务

组件的生命周�?

生命周期 说明
created 生命周期回调—监听页面加�?
attached 生命周期回调—监听页面显�?
ready 生命周期回调—监听页面初次渲染完�?
moved 生命周期回调—监听页面隐�?
detached 生命周期回调—监听页面卸�?
error 每当组件方法抛出错误时执�?

注意的是�?

  • 组件实例刚刚被创建好时, created 生命周期被触发,此时,组件数�?this.data 就是�?Component 构造器中定义的数据 data �?此时不能调用 setData
  • 在组件完全初始化完毕、进入页面节点树后, attached 生命周期被触发。此时, this.data 已被初始化为组件的当前值。这个生命周期很有用,绝大多数初始化工作可以在这个时机进�?- 在组件离开页面节点树后�?detached 生命周期被触发。退出一个页面时,如果组件还在页面节点树中,�? detached 会被触发

还有一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理,这样的生命周期称为“组件所在页面的生命周期”,�?pageLifetimes 定义段中定义,如下:

生命周期 说明
show 组件所在的页面被展示时执行
hide 组件所在的页面被隐藏时执行

代码如下�?

1
2
3
4
5
6
7
8
Component({
pageLifetimes: {
show: function() {
// 页面被展�? },
hide: function() {
// 页面被隐�? },
}
})

三、执行过�?

应⽤的⽣命周期执行过程:

  • ⽤户⾸次打开⼩程序,触发 onLaunch(全局只触发⼀次)

  • ⼩程序初始化完成后,触发onShow⽅法,监听⼩程序显示

  • ⼩程序从前台进⼊后台,触�?onHide⽅法

  • ⼩程序从后台进⼊前台显示,触�?onShow⽅法

  • ⼩程序后台运⾏⼀定时间,或系统资源占⽤过⾼,会被销�?

⻚⾯⽣命周期的执行过程:

  • ⼩程序注册完成后,加载⻚⾯,触发onLoad⽅法
  • ⻚⾯载⼊后触发onShow⽅法,显示⻚�?- ⾸次显示⻚⾯,会触发onReady⽅法,渲染⻚⾯元素和样式,⼀个⻚⾯只会调⽤⼀�?- 当⼩程序后台运⾏或跳转到其他⻚⾯时,触发onHide⽅法
  • 当⼩程序有后台进⼊到前台运⾏或重新进⼊⻚⾯时,触发onShow⽅法
  • 当使⽤重定向⽅法 wx.redirectTo() 或关闭当前⻚返回上⼀⻚wx.navigateBack(),触发onUnload

当存在也应用生命周期和页面周期的时候,相关的执行顺序如下:

  • 打开小程序:(App)onLaunch –> (App)onShow –> (Pages)onLoad –> (Pages)onShow –> (pages)onRead

  • 进入下一个页面:(Pages)onHide –> (Next)onLoad –> (Next)onShow –> (Next)onReady

  • 返回上一个页面:(curr)onUnload –> (pre)onShow

  • 离开小程序:(App)onHide

  • 再次进入:小程序未销�?–> (App)onShow(执行上面的顺序),小程序被销毁,(App)onLaunch重新开始执�?

参考文�?

面试官:说说微信小程序的登录流程�?

一、背�?

传统的web开发实现登陆功能,一般的做法是输入账号密码、或者输入手机号及短信验证码进行登录

服务端校验用户信息通过之后,下发一个代表登录态的 token 给客户端,以便进行后续的交互,每当token过期,用户都需要重新登�?
而在微信小程序中,可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系,从而实现登陆功�?
实现小程序用户体系主要涉及到openidcode的概念:

  • 调用wx.login()方法会生成code,将code作为参数传递给微信服务器指定接口,就可以获取用户的openid

对于每个小程序,微信都会将用户的微信ID映射出一个小程序 openid,作为这个用户在这个小程序的唯一标识

二、流�?

微信小程序登陆具体实现的逻辑如下图所示:

  • 通过 wx.login() 获取到用户的code判断用户是否授权读取用户信息,调用wx.getUserInfo 读取用户数据
  • 由于小程序后台授权域名无法授权微信的域名,所以需要自身后端调用微信服务器获取用户信息
  • 通过 wx.request() 方法请求业务方服务器,后端把 appid , appsecret �?code 一起发送到微信服务器�?appid �?appsecret 都是微信提供的,可以在管理员后台找到
  • 微信服务器返回了 openid 及本次登录的会话密钥 session_key
  • 后端从数据库中查�?openid ,如果没有查到记录,说明该用户没有注册,如果有记录,则继续往下走
  • session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传�?- 然后生成 session并返回给小程�?- 小程序把 session 存到 storage 里面
  • 下次请求时,先从 storage 里面读取,然后带给服务端
  • 服务端对�?session 对应的记录,然后校验有效�?
    更加详细的功能图如下所示:

三、扩�?

实际业务中,我们还需要登录态是否过期,通常的做法是在登录态(临时令牌)中保存有效期数据,该有效期数据应该在服务端校验登录态时和约定的时间(如服务端本地的系统时间或时间服务器上的标准时间)做对比

这种方法需要将本地存储的登录态发送到小程序的服务端,服务端判断为无效登录态时再返回需重新执行登录过程的消息给小程

另一种方式可以通过调用wx.checkSession检查微信登陆态是否过期:

  • 如果过期,则发起完整的登录流�?- 如果不过期,则继续使用本地保存的自定义登录�?
    这种方式的好处是不需要小程序服务端来参与校验,而是在小程序端调用AP,流程如下所示:

参考文�?

面试官:说说微信小程序中路由跳转的方式有哪些?区别?

一、是什�?

微信小程序拥有web网页和Application共同的特征,我们的页面都不是孤立存在的,而是通过和其他页面进行交互,来共同完成系统的功能

在微信小程序中,每个页面可以看成是一个 pageModelpageModel 全部以栈的形式进行管�?

二、有哪些

常见的微信小程序页面跳转方式有如下:

  • wx.navigateTo(Object)
  • wx.redirectTo(Object)
  • wx.switchTab(Object)
  • wx.navigateBack(Object)
  • wx.reLaunch(Object)

wx.navigateTo(Object)

wx.navigateTo()用于保留当前页面、跳转到应用内的某个页面,使�?wx.navigateBack可以返回到原页面

对于页面不是特别多的小程序,通常推荐使用 wx.navigateTo进行跳转�?以便返回原页面,以提高加载速度。当页面特别多时,则不推荐使�?
参数表如下所示:

流程图如下:

wx.redirectTo(Object)

重定向,当页面过多时,被保留页面会挤占微信分配给小程序的内存,或是达到微信所限制�?10 层页面栈的情况下,我们应该考虑选择 wx.redirectTo

wx.redirectTo()用于关闭当前页面,跳转到应用内的某个页面

这样的跳转,可以避免跳转前页面占据运行内存,但返回时页面需要重新加载,增加了返回页面的显示时间

参数表如下所示:

流程图如下所示:

wx.switchTab(Object)

跳转�?tabBar 页面,并关闭其他所有非 tabBar 页面

参数表如下所示:

wx.navigateBack(Object)

wx.navigateBack() 用于关闭当前页面,并返回上一页面或多级页面,开发者可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层则设置对象的delta属性即�?
参数表如下:

wx.reLaunch(Object)

关闭所有页面,打开到应用内的某个页面,返回的时候跳到首�?
流程图如下所示:

参数表如下所示:

三、总结

关于上述五种跳转方式,做下总结�?

  • navigateTo 保留当前页面,跳转到应用内的某个页面,使�?wx.navigateBack 可以返回到原�?- redirectTo 关闭当前页面,跳转到应用内的某个页面

  • switchTab 跳转�?tabBar 页面,同时关闭其他非 tabBar 页面

  • navigateBack 返回上一页面

  • reLanch 关闭所有页面,打开到应用内的某个页�?
    其中关于它们的页面栈的关系如下:

  • avigateTo 新页面入�?

  • redirectTo 当前页面出栈,新页面入栈

  • navigateBack 页面不断出栈,直到目标返回页,新页面入栈

  • switchTab 页面全部出栈,只留下新的 Tab 页面

  • reLanch 页面全部出栈,只留下新的页面

参考文�?

面试官:说说提高微信小程序的应用速度的手段有哪些�?

一、是什�?

小程序启动会常常遇到如下图场景:

这是因为,小程序首次启动前,微信会在小程序启动前为小程序准备好通用的运行环境,如运行中的线程和一些基础库的初始�?
然后才开始进入启动状态,展示一个固定的启动界面,界面内包含小程序的图标、名称和加载提示图标。此时,微信会在背后完成几项工作�?

  • 下载小程序代码包
  • 加载小程序代码包
  • 初始化小程序首页

下载到的小程序代码包不是小程序的源代码,而是编译、压缩、打包之后的代码�?
整体流程如下图:

二、手�?

围绕上图小程序的启动流程�?我们可以从加载、渲染两个纬度进行切入:

加载

提升体验最直接的方法是控制小程序包的大小,常见手段有如下:

  • 代码包的体积压缩可以通过勾选开发者工具中“上传代码时,压缩代码”选项

  • 及时清理无用的代码和资源文件

  • 减少资源包中的图片等资源的数量和大小(理论上除了小icon,其他图片资源从网络下载),图片资源压缩率有�?
    并且可以采取分包加载的操作,将用户访问率高的页面放在主包里,将访问率低的页面放入子包里,按需加载

当用户点击到子包的目录时,还是有一个代码包下载的过程,这会感觉到明显的卡顿,所以子包也不建议拆的太大,当然我们可以采用子包预加载技术,并不需要等到用户点击到子包页面后在下载子包

渲染

关于微信小程序首屏渲染优化的手段如下�?

  • 请求可以在页面onLoad就加载,不需要等页面ready后在异步请求数据
  • 尽量减少不必要的https请求,可使用 getStorageSync() �?setStorageSync() 方法将数据存储在本地
  • 可以在前置页面将一些有用的字段带到当前页,进行首次渲染(列表页的某些数�?-> 详情页),没有数据的模块可以进行骨架屏的占位

在微信小程序中,提高页面的多次渲染效率主要在于正确使用setData�?

  • 不要过于频繁调用setData,应考虑将多次setData合并成一次setData调用
  • 数据通信的性能与数据量正相关,因而如果有一些数据字段不在界面中展示且数据结构比较复杂或包含长字符串,则不应使用setData来设置这些数�?- 与界面渲染无关的数据最好不要设置在data中,可以考虑设置在page对象的其他字段下

除此之外,对于一些独立的模块我们尽可能抽离出来,这是因为自定义组件的更新并不会影响页面上其他元素的更�?
各个组件也将具有各自独立的逻辑空间。每个组件都分别拥有自己的独立的数据、setData调用

三、总结

小程序启动加载性能�?

  • 控制代码包的大小
  • 分包加载
  • 首屏体验(预请求,利用缓存,避免白屏,及时反�?
    小程序渲染性能�?
  • 避免不当的使用setData
  • 使用自定义组�?

参考文�?

面试官:说说微信小程序的发布流程�?

一、背�?

在中大型的公司里,人员的分工非常仔细,一般会有不同岗位角色的员工同时参与同一个小程序项目。为此,小程序平台设计了不同的权限管理使得项目管理者可以更加高效管理整个团队的协同工作

以往我们在开发完网页之后,需要把网页的代码和资源放在服务器上,让用户通过互联网来访问

在小程序的平台里,开发者完成开发之后,需要在开发者工具提交小程序的代码包,然后在小程序后台发布小程序

二、流�?

关于发布的流程,主要分成了三个部分:

  • 上传代码
  • 提交审核
  • 发布版本

上传代码

在开发者工具中,可以点击代码上传功能:

然后就可以填写版本信息:

然后点击上传,编译器则会提示上传代码成功

提交审核

代码上传完毕,就可以登陆微信公众号的官网首页,点击【开发管理】,查看应用详情�?

提交审核过程需要填写审核信息,如下图:

提交审核成功之后如下图:

发布版本

当审核通过之后,即可提交发�?

发布成功之后则如下:

三、扩�?

上述是最简单的小程序代码发布的流程,通常的流程如下:

  • 代码管理服务器上新建分支
  • 开发测试新需�?- 测试完成后,将本地分支合并到 master 分支
  • 拉取 master 分支最新代码,执行 build 命令生成小程序可执行文件
  • 开发者工具点击“上传�?- 提审
  • 发布

但是面对多人协调开发的时候,有可能出现已经上线的代码还没合并到master的情�?
因此可以考虑自动化构建部署,就是将从开发到部署的一系列流程变成自动化,衔接连贯,在构建失败时能够告知开发者,构建成功后能够告知测试和实施人员,可参考如下流程图�?

参考文�?

面试官:说说微信小程序的支付流程�?

一、前言

微信小程序为电商类小程序,提供了非常完善、优秀、安全的支付功能

在小程序内可调用微信的API完成支付功能,方便、快�?
场景如下图所示:

  • 用户通过分享或扫描二维码进入商户小程序,用户选择购买,完成选购流程
  • 调起微信支付控件,用户开始输入支付密�?- 密码验证通过,支付成功。商户后台得到支付成功的通知
  • 返回商户小程序,显示购买成功
  • 微信支付公众号下发支付凭�?

二、流�?

以电商小程序为例

支付流程图如下所示:

具体的做法:

  • 打开某小程序,点击直接下�?- wx.login获取用户临时登录凭证code,发送到后端服务器换取openId
  • 在下单时,小程序需要将购买的商品Id,商品数量,以及用户的openId传送到服务�?- 服务器在接收到商品Id、商品数量、openId后,生成服务期订单数据,同时经过一定的签名算法,向微信支付发送请求,获取预付单信�?prepay_id),同时将获取的数据再次进行相应规则的签名,向小程序端响应必要的信�?- 小程序端在获取对应的参数后,调用wx.requestPayment()发起微信支付,唤醒支付工作台,进行支�?- 接下来的一些列操作都是由用户来操作的包括了微信支付密码,指纹等验证,确认支付之后执行鉴权调起支�?- 鉴权调起支付:在微信后台进行鉴权,微信后台直接返回给前端支付的结果,前端收到返回数据后对支付结果进行展示
  • 推送支付结果:微信后台在给前端返回支付的结果后,也会向后台也返回一个支付结果,后台通过这个支付结果来更新订单的状�?
    其中后端响应数据必要的信息则是wx.requestPayment方法所需要的参数,大致如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wx.requestPayment({
// 时间�? timeStamp: '',
// 随机字符�? nonceStr: '',
// 统一下单接口返回�?prepay_id 参数�? package: '',
// 签名类型
signType: '',
// 签名
paySign: '',
// 调用成功回调
success () {},
// 失败回调
fail () {},
// 接口调用结束回调
complete () {}
})

参数表如下所示:

三、结�?

小程序支付和以往的网页、APP微信支付大同小异,可以说小程序的支付变得更加简洁,不需要设置支付目录、域名授权等操作

参考文�?

分析 JD 招聘要求

JD, Job Description 职位描述,分�?JD 可以看到公司对候选人的要求和期望�?
::: tip
如有疑问,可免费 加群 讨论咨询,也可参�?1v1 面试咨询服务�?专业、系统、高效、全流程 准备前端面试
:::

通过 JD 能看到什�?

  • 工作内容,负责什么产品和业务
  • 薪资范围(参�?*最小�?*即可,如 15k-20k 那就�?15k)和福利待遇
  • 技术栈,但不一定写的很清楚
  • 经验要求,例如要求多少年工作经验

根据这些内容,review 一下自己的经验和能力,看是否要投递这个职位�?

案例分析

从这�?JD 可以看出如下关键信息

  • 工资 10k 多一点,不算�?- 上市公司,公司规模很大,有利于自我成�?- 和微信有交互,面试之前需要多看看微信开发文�?—�?重要�?- 有产品经理和 UI 设计师,说明团队、项目都比较正规
  • 有商业保�?

不要过于在意 JD

  • JD �?HR 发布的,很多内容都是从网上抄来的
  • HR 不懂技术,写的可能会比较含�?- 要求会过于理想化,所以“面试造火箭,工作拧螺丝�?
    所以,不要过于在意 JD ,如果你觉得这个机会比较适合自己,就大胆投递简历,博取一个机会�?

投递简�?

::: tip
如有疑问,可免费 加群 讨论咨询,也可参�?1v1 面试咨询服务�?专业、系统、高效、全流程 准备前端面试
:::

投递方�?

  • 各大招聘网站�?App ,如拉勾、BOSS 直聘、脉脉等
  • 各大公司的招聘网站,如搜�?字节 招聘 即可找到 https://jobs.bytedance.com/
  • 猎头推荐
  • 结识公司内部员工(同学,前同事,朋友等关系),内�?- HR 主动联系�?

各大公司招聘网站

如有其他公司招聘网址,欢迎给我们提交,我们会及时收录�?

更多

面试�?正在规划一个前端交流社群,会把猎头、内推等机会都汇总到这里,WIP…

了解面试流程

没有工作经验、面试经验的同学,需要先整体了解一下程序员面试的常规流程�?
::: tip
实际面试时,流程可能会有变动,灵活处理,可免�?加群 讨论咨询�?
也可参与 1v1 面试咨询服务�?专业、系统、高效、全流程 准备前端面试
:::

寻找工作机会

  • 各大招聘网站�?App ,如拉勾、BOSS 直聘、脉脉等

  • 各大公司的招聘网站,如搜�?字节 招聘 即可找到 https://jobs.bytedance.com/

  • 猎头推荐

  • 结识公司内部员工(同学,前同事,朋友等关系),内�?- HR 主动联系�?
    ::: tip
    如何让猎头、HR 找到你呢?—�?主动暴露自己

  • 发表高质量博�?- 做社区有用的开源项�?- 注册脉脉、LinkedIn 等,增加社交关系(如有名校、大厂等 title�?
    :::

投递简�?

找到工作机会,主动投递简历给 HR 或者内推者�?

  • 简历要写好,做好简历优化,珍惜投递机�?- 简历使�?PDF 格式,不要用 word 文档!!�?- 要以邮件形式投递,且是工作邮箱。如百度�?HR 工作邮箱一般是 [email protected]

收到面试邀�?

如果你的简历被筛选通过,会收到 HR 的面试邀请。恭喜你,面试流程正式开始�?
准备好:纸、笔、打印简历、电脑。如果是现场面试,都带过去�?

HR 初步沟�?

一�?HR 会先和你做初步沟通,远程电话或视频形式,大约 20-30 分钟,以确定你这个人是可以正常沟通的,没有极端的情绪和沟通障碍�?
你可以提前看�?HR 行为面试 的问题,在这一步有可能会问到其中的几个问题�?

一�?

技术面试,以考察基础知识为主。面试官一般是基层开发人员,你未来的同事�?
某些公司在一面开始之前,可能会让你做笔试题,考察算法、写代码、读代码等基础问题�?
::: tip
如果让你写代码,你可以申请用自己电脑写,一般都会同意�?:::

二面

技术面试,以考察框架和项目为主。面试官一般是团队的高�?资深工程�?项目负责人,你未来的导师�?
二面结束后,很多公司会安排交叉面试,也是技术面试。交叉,即请其他团队的高�?资深工程师,再考察一遍�?

三面

团队 Leader 面试,不再关注技术细节,多考察项目组织和设计能力,挖掘技术潜力�?
如果你是应届生或工作经验较少,没太多项目设计能力,三面可能会很快结束,但不代表你会被拒绝�?

HR �?

所有技术面试都通过了以后,HR 会进行行为面试,然后谈薪资。但这一步不会立刻发 offer ,会有内部评审�?

�?offer

如果 HR 面试没问题,且薪资谈妥,最后会正式�?offer 邮件,通知你哪天入职�?
PS. 入职前要�?HR 确认好,会签国家法定的劳动合同,会按照国家规定缴纳社保和公积金,最好能有商业医疗保险。这些在中大厂都是标配,但不是所有公司都有,自己确认好�?

0%