В последнее время эпидемия сильно пошла на поправку, и у всех стало неспокойно на сердце, и у всех есть мысли о смене работы. В последнее время я каждый день опрашиваю несколько мелких партнеров, на всякий случай, если это не нужно срочно. Прочитав слишком много резюме, я понял, что есть три типа резюме: настоящие резюме, поддельные резюме и настоящие резюме. Итак, как я прошу и носить эти резюме, позвольте мне поделиться с вами.
Прежде всего, позвольте мне пожаловаться на несколько слов, когда я только начал руководить командой, мне удалось собрать маленького друга, в результате, маленький друг остался на год, а затем ушел. Сначала я жаловался, что мои коллеги недостаточно лояльны, но теперь я очень спокоен, так называемая лояльность означает, что не хватает рычагов воздействия на предательство. В последнее время я чувствую, что козырей у меня достаточно, и я тоже подумываю о смене работы, она совпадает с рутинным набором персонала в компанию каждый год, так что сейчас я нахожусь в состоянии постоянно собеседоваться и собеседоваться. Есть много людей, которые берут интервью, и у меня много чувств, и я хочу поделиться с вами.
Следующие в основном делятся, с которыми я столкнулся в процессе интервьюподдельное резюмеЯ хочу покинуть свои поддельные партнеры, чтобы увидеть, плавают ли они.
1. Опыт работы
Многие соискатели предпочитают обманывать в этом отношении, в основном, в следующих двух видах:
1. Продлите опыт работы
В конце прошлого года компания хотела найти опытного фронтенда и собиралась создать еще один отдел R&D.В то время они брали интервью у крупного парня, который якобы имел 9-летний стаж работы. Резюме очень хорошее. Я работаю в одной компании 4 года, а в другой 5 лет. На первый взгляд я чувствую себя очень стабильно, и стек технологий очень всеобъемлющий. В то время я был очень взволнован. Я думал, что компания, наконец, заплатит, чтобы нанять большого босса.Талант 4 года опыта работы.
Во время интервью,
- Я: Сколько лет вы используете фреймворк Vue.js?
- Он: 8 лет.
- В то время я был немного сбит с толку, не мог в это поверить и снова спросил его: «Значит, вы начали использовать Vue в 2012 году?».
- Он: Ну, верно.
- Я все еще не сдаюсь и еще раз спрашиваю, сколько вы использовали Vue в начале?
- Он: Конечно, это Vue2.
В это время в моем сердце скачут 10 000 травяных и грязевых лошадей.Можно ли быть более надежным?Vue еще не вышел в 2012 году. Интервью закончилось, едва начавшись.
Здесь я хотел бы сказать:
要造假麻烦先去了解一下前端每个技术栈的发展史吧!!
Краткая история Vue:
- 28 июля 2013 года Yuxi You впервые отправил код для Vue.js на GitHub, который в то время не назывался Vue.js.
- 8 декабря 2013 года You Yuxi выпустила версию 0.6.0 на GitHub и официально переименовала проект в Vue.js.
- 27 октября 2015 года Vue.js выпустила версию 1.0.0.
- 1 октября 2016 года Vue.js открыл версию 2.0.0, вступив в эпоху 2.
Историю развития других технологических стеков можно найти в журнале коммитов git. такие как Вью
2. Совмещенный опыт работы
Друзья, у которых есть совместный опыт работы, должны очень часто менять работу, я боюсь, что это заставит людей чувствовать себя очень неуравновешенно. Идея хорошая, действительно при тех же условиях, я буду считать каждый опыт работы относительно долгим.
但是合并的时候,可不可牢记一下你的项目经历要跟工作经验的时间结点对的上。
Я только что в апреле брала интервью у девушки с 3-х летним стажем работы, она очень красивая и первое впечатление очень хорошее.
Опыт работы в резюме:
- 2016.05.10-2018.04.20 xx корпоративный веб-инженер
- 2018.04.24-2019.03.29 xx инженер веб-интерфейса компании
- 2019.4.8-настоящее время инженер веб-интерфейса компании xx
В то время меня очень интересовал ее ранний проектный опыт.Этот проект был разработан с помощью Vue, а элемент использовался в качестве библиотеки компонентов.Основными функциями были картографические приложения и большие экраны данных, что было близко к запуску проекта. компанией. В ее резюме было написано, что она заполняла его самостоятельно и много чего спрашивала. Он чувствует себя довольно хорошо, достаточно надежен, и, наконец, я хочу подтвердить сроки строительства этого проекта.
- Я: Когда начался этот проект и сколько времени ушло на его завершение?
- Она: Это началось в марте 2018 года и длилось более 4 месяцев.
- В резюме в марте 2018 года было написано май 2018. Я повторила ее слова.Началось в марте 2018 года и заняло более 4 месяцев.
- Она: Ну, у этого проекта много функций, и от разработки до запуска прошло более 4 месяцев. Затем она описала мне процесс проекта.
- Я: Это началось в марте и вышло в интернет в июле.Ты торопишься и часто работаешь сверхурочно в середине?
- Она часто работает сверхурочно и фокусируется на проектах.
Что ж, я несколько раз подтверждал ей, что проектный опыт не соответствует временному моменту ее опыта работы.Хотя она очень подходит, но в итоге она прошла мимо меня. Я не берусь гарантировать, реальный ли у нее опыт работы и часто ли она раньше меняла работу.
2. Опыт проекта
При написании опыта проекта многие мелкие партнеры привыкли брать то, что сделали другие, как свое собственное, и добавлять это к своему собственному опыту проекта, думая, что это обогатит их опыт проекта.
Чтобы носить его корону, нужно нести его вес. Если вы хотите держать розу, вы должны терпеть ее рану.
Если вы не понимаете чужих вещей, примите их как свои собственные, и вы сами пострадаете. Ниже приводится интервью для иллюстрации.
В середине апреля я брал интервью у маленького партнера с 2-летним стажем работы. Проектный опыт очень богатый, всего за два года я сделал 9 проектов, и многие проекты возглавляю.
Я начал общаться с ним один за другим.
1. Расскажите о настройке маршрутизации Vue
Он хотел ответить некоторое время: «Сначала установить маршрут с Vue.use».
Я выслушал, а потом сказал, что ты должен написать это первым.
import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);
Я посмотрел и сказал: "Это для установки Vue Router, как его настроить. Ты продолжай писать. В этот раз он долго думал, я напомнил: "Даю тебе 3 минуты на размышление". Он споткнулся и написал это
const router = new Router({
mode: 'history',
routes:[
{
path: '/a',
component: () =>import('page/a'),
}
]
});
Ну, это как выдавливать зубную пасту. Я утешал его, чтобы он не нервничал: «Зачем использовать() =>import('page/a')Импорт компонента а. "
«Напишите это, чтобы лениво загрузить этот компонент».
«Что такое отложенная загрузка, каковы преимущества и где это отражено?»
«Отложенная загрузка — это загрузка ресурсов этого компонента, когда компонент должен отображаться, что может сократить время загрузки первого экрана».
Ладно, я хотел продолжить спросить: «Почему это так работает, а ресурсы компонента подгружаются при отображении компонента?» Забудьте, это касается вебпака.
Я продолжал спрашивать: «Если мой проект развернут на xxx.com/test/, как настроить маршрутизацию?»
Он долго колебался, и я напомнил: "Вы когда-нибудь пользовались базовой опцией? Как вы обычно настраиваете эту опцию?"
«Он автоматически генерируется при создании проекта с помощью Vue Cli, что обычно используется по умолчанию».
Что ж, скажу ему ответ прямо: «Настроить базу как /test/». Продолжайте спрашивать: "После настройки маршрута, как его импортировать в проект?"
Он продолжал писать на бумаге.
const router = new Router({
mode: 'history',
routes:[
{
path: '/a',
component: () =>import('page/a'),
}
]
});
const vm = new Vue({
el:"#app",
router:router,
render: h => h(App)
})
"Вы обычно настраиваете роутинг в main.js? Настраиваете роутинг в отдельном файле, как написать"
"Запишите маршрут в файл index.js в папке src/router, а затем экспортируйте его"
export default router
Затем напишите в main.js
import router from 'src/router'
const vm = new Vue({
el:"#app",
router:router,
render: h => h(App)
})
"Запись в файл index.js, то почемуimport router from 'src/router'вместоimport router from 'src/router/index'', Я попросил.
Он снова колеблется, что ж, признаю, я немного придурок.
Я прямо сказал ему ответ: «Поскольку в конфигурации разрешения веб-пакета есть опция mainFiles, функция состоит в том, чтобы настроить имя файла, которое будет использоваться при разрешении каталога. написать индекс."
Не по теме
Вот отступление, почему?import Vue from 'vue';import Router from 'vue-router';Это приводит к Vue и vue Router, разве они не внутри node_modules?
На самом деле, опция modules в конфигурации разрешения webpack работает, сообщая webpack каталог, который следует искать при разрешении модулей, по умолчанию это["node_modules"], поэтому для его поиска он перейдет непосредственно к node_modules.
Конфигурация resolve.mainFields говорит нам, что при импорте модулей из node_modules этот параметр будет определять, какое поле использовать в package.json для импорта модуля, значение по умолчанию["module", "main"].
В package.json в исходном коде Vue есть этот раздел конфигурации
"main": "dist/vue.runtime.common.js",
"module": "dist/vue.runtime.esm.js",
такimport Vue from 'vue', на самом деле загрузите файл dist/vue.runtime.esm.js, который, наконец,export default Vue;, который привносит Vue в наш проект.
вернуться к теме
"Не беда, требуется настроить содержимое опций роутера в файле самостоятельно. Что вы хотите сделать?"
На этот раз он написал ее очень быстро, и кажется, что еще может ее заказать. Создайте файл маршрутов в папке src/router и напишите его внутри.
const routes=[
{
path: '/a',
component: () =>import('page/a'),
}
]
export default routes
затем в файле index.js
import routes from './routes'
const router = new Router({
mode: 'history',
routes: routes
});
Вроде бы базовая настройка маршрутизации Xiongtai еще хороша, давайте спросим немного глубже: "Как настроить белый и черный список адресов через маршрутизацию?"
Он подумал об этом какое-то время, "настройте это в хуке beforeEach", я кивнул, чтобы дать ему сигнал продолжить, "напишите это"
router.beforeEach((to,from,next) =>{
const passurl = [];
const nopassurl = [];
let ispass = true;
if(passurl.indexOf(to.path) > -1){
ispass = true;
}
if(nopassurl.indexOf(to.path) > -1){
ispass = true;
}
if(ispass){
next();
}
})
Хорошо, так себе, "Вложенная маршрутизация будет работать?"
"Использовал."
«Дайте вам сцену, в меню a есть подменю a1 и подменю a2, вы можете написать конфигурацию маршрутизации и создание каталога файлов страниц меню и<router-view/>куда писать. "
- a
- layout.vue
- a1
-index.vue
-a2
-index.vue
//layout.vue
<template>
<router-view/>
</template>
const routes:[
{
path:'/a',
component:() =>import('page/a/layout'),
redirect: '/a/a1',
children:[
{
path:'/a/a1',
component:() =>import('page/a/a1')
},
{
path:'/a/a2',
component:() =>import('page/a/a2')
}
]
}
]
Что ж, базовая конфигурация будет выполнена, и напоследок задам вопрос: "Как настроить маршрут 404?"
Этот сюнтай снова был ошеломлен и спросил меня, что это такое: «Что такое маршрут 404?»
Ну, "я просто ввожу адрес, а этот адрес не настроен в роутинге, и не удается найти соответствующую страницу. Что мне делать в это время?"
Некоторое время он думал: «Не знаю, я им не пользовался.» На этот раз я не ответил.
{
path: '*',
redirect: '/home'
}
*Представляет подстановочный знак, соответствующий любому пути, обратите внимание, что маршрут, содержащий подстановочный знак, должен быть помещен в конец, в противном случае любой адрес будет переходить на/homeЭтот адрес.
2. О функциях меню шапки и бокового меню на главной странице
Обычно системное меню будет иметь многоуровневые меню, а данные рендеринга меню обычно поступают из данных разрешений системного меню, которые обычно представляют собой данные древовидной структуры.Конечно, некоторые серверные части ленивы и возвращают данные структуры массива. напрямую. Вы должны сами построить древовидную структуру данных,Как построить можно нажать здесь.
Это будет включать два аспекта: один — обработка древовидных данных с использованием рекурсивных функций, а другой — использование рекурсивных компонентов.
Я начал спрашивать: «Использовали ли вы рекурсивную функцию, напишите обработку данных древовидной структуры для создания json с идентификатором узла в качестве ключа и значением в качестве значения URL-адреса в узле».
После 5 минут письма он сдался и просто сказал нет.
function getUrl(data,result={}){
data.forEach(item =>{
result[item.id] = item.url;
if(item.children && Array.isArray(item.children) && item.children.length){
getUrl(item.children,result)
}
})
}
Я снова спросил: «Тогда напишите метод для получения URL-адреса первого дочернего узла первого элемента данных древовидной структуры. Если у узла все еще есть дочерние узлы, продолжайте получать его, пока у узла не останется дочерних узлов».
После 10 минут написания я сдался.
function getUrl(data) {
let item = data[0];
if (item && Array.isArray(item.children) && item.children.length) {
return getFirstUrl(item.children)
} else {
return item.url
}
};
Этого тоже не будет, я просто перестал спрашивать его о рекурсивных функциях.
Он выдавил из себя улыбку и объяснил: «Эта встреча, просто сейчас немного нервничаешь?»
Это никак не связано с нервозностью, поэтому я его утешил, а потом спросил: «Использовался ли рекурсивный компонент, как он используется и на что следует обратить внимание?»
Он подумал об этом какое-то время, и я увидел, как трясутся его руки, и сказал: «Не нервничай, думай медленно».
«Рекурсивные компоненты должны быть компонентами, которые вызывают сами себя?»
"Тогда как назвать себя?"
Он долго бормотал: «Я забыл».
Хорошо, понял.
Рекурсивный компонент вызывает сам себя через параметр имени компонента, при его использовании обратите внимание на то, чтобы рекурсивный вызов был условным (например, с использованием v-if, который в итоге получит false), иначе он попадет в бесконечный петля.
Если я спрошу здесь, я могу сказать, что он никогда не делал функции меню заголовка и бокового меню. Некоторые из этих опытов проекта должны быть фальшивыми.
Во второй половине дня делать было нечего, поэтому я продолжал задавать вопросы, чтобы увидеть, насколько фальшивым был его опыт в этих проектах.
3. Вопросы по настройке аксиом пакетов
«Что такое axios и в чем разница между ajax?» — спросил я прямо.
«axios — это HTTP-библиотека, основанная на промисах. Ajax не поддерживает промисы. Если между несколькими запросами существует последовательная связь, будет ад обратного вызова»
"Как установить аксиос, как ввести аксиос?"
«Выполнение заказаnpm instal axios --saveустановить сimport axios from 'axios'импорт"
"Тогда как вы аксиос инкапсулировали, напишите об этом"
import axios from 'axios'
const service = axios.create({
timeout:3*60*1000,
baseURL:'xxx',
})
export default service
import service from './axios'
export function xxx(data){
return service.post('xxxx',data)
}
export function xxx(data){
retruan service.get('xxxx',{params:data})
}
Я посмотрел, там все просто. Спросил: "Еще что-нибудь?"
Он посмотрел на меня. Он подумал об этом некоторое время, затем покачал головой.
«После того, как вы войдете в систему в обычном режиме, как вы сообщите серверной части, что вы вошли в систему?»
«Полезные токены и куки»
«Как вы настраиваете при использовании токенов?»
Он долго думал: «Поместите это в шапку запроса».
«Как это написать».
import axios from 'axios'
const service = axios.create({
timeout:3*60*1000,
baseURL:'xxx',
headers:{
token:xxx
}
})
export default service
«Тогда интерфейс входа в систему не должен устанавливать токен в заголовке запроса, как вы с этим справитесь».
Через некоторое время он покачал головой: «Вы использовали перехватчик Axios?»
«Полезные перехватчики запросов и ответов»
"Расскажи, что перехватывает этот перехватчик"
«Запрос перехватывается до запроса, а ответ перехватывается после запроса».
«Ответ перехватывается после запроса до того, как его поймают», — добавил я. «Затем используйте перехватчик запросов, чтобы добавить токен в заголовок запроса и записать его»
Он написал несколько раз, отложил ручку и сказал: «Я разучился писать».
Что ж, кажется, что его проектный опыт водянистый. Я сказал ему ответ.
service.interceptors.request.use(function(config){
const token = getToken();//去获取token,如果有设置在请求头上。
if (token) {
config.headers.token = token;
}
return config;
})
он посмотрел, указалinterceptorsЭто слово, скажите: «Я просто не могу написать это слово, поэтому я не могу его написать».
«О, тогда напишите, как предварительно обработать данные, возвращаемые из запроса».
service.interceptors.response.use(function(res){
const data = res.data;
if (res.status == 200) {
return data
}
})
Правда ли, что слово забыто, поэтому я не могу его написать. Я спрашиваю: "Тогда напишите, как перехватывать ошибки запросов?"
service.interceptors.response.use(
function(res){
const data = res.data;
if (res.status == 200) {
return data
}
},
function(err){
this.$message({
message: err.data.msg,
type: 'error',
showClose: true,
})
return err
}
)
Я прочитал код, который он написал, и я почти уверен, что его проектный опыт — подделка. «К чему это относится?» — спросил я.
«это экземпляр Vue».
Услышав эту фразу, я не хотел больше задавать вопросов, поэтому вежливо сказал ему: «Возвращайся и жди новостей, я дам тебе ответ в течение 2 дней».
Неужели так много вопросов по настройке axios? Конечно не только, давайте продолжим наблюдать за процессом моего интервью с другим собеседником
В резюме интервьюируемого написано: Знаком с аксиомами, может дополнительно инкапсулировать аксиомы, такие как перехват и обработка заголовков запроса перед запросом, запрос обратного перехвата, обработка возвращенных данных, настройка прокси и т. д.
По поводу предыдущего вопроса, я тоже задавал его по порядку, и ответ был неплох. Я быстро спросил его: "Как вы перехватили запрос, когда он вернулся? Запишите его." (ps: Во время собеседования в нашей компании , потребуется собеседование на борту)
const showErrorMessage = function(message){
vm.$message.close();
vm.$message({
message: message,
type: 'error',
showClose: true,
})
}
const response = function(res){
if(res.status == 200){
const data = res.data;
const message = data.msg ? data.msg : '未知错误';
if(data.code == 518 || data.code == 519){//登录失效
if(vm.$route.query.redirect){
vm.$router.push({
path:'/login',
query:{
redirect:vm.$route.query.redirect
}
})
}else{
vm.$router.push({
path:'/login',
query:{
redirect:encodeURIComponent(vm.$route.fullPath)
}
})
}
}else if(data.code && data.code != 200){
showErrorMessage(message)
}
return data
}
}
const response_err = function(){
if(err.response){
const response = err.response;
const status = response.status;
const message = response.data.msg ? response.data.msg : '未知错误';
switch (status) {
case 400:
showErrorMessage('请求出错');
break;
case 403:
showErrorMessage('拒绝访问');
break;
case 404:
showErrorMessage('资源不存在');
break;
case 405:
showErrorMessage('请求方法未允许');
break;
case 500:
showErrorMessage('服务器内部出错');
break;
case 503:
showErrorMessage('访问服务器失败');
break;
default:
showErrorMessage(message);
}
}
return Promise.reject(err);
}
service.interceptors.response.use(response,response_err);
Я прочитал его ответ, и он должен быть в состоянии перехватить и обработать это. Спросите о конфигурации заголовка запроса.
«В дополнение к настройке токена заголовок запроса должен настроить эти вещи, написать это?»
«Также настройте тип Content-Type и сообщите серверу, что я передам вам параметры в каком формате. Обычно это определяется внутренним интерфейсом. Тип обязателен».
«Сколько типов существует вообще?»
«Есть три типа, которые обычно используются в проектах».
-
application/x-www-form-urlencodedФормат отправки формы по умолчанию, вам нужно использоватьnew URLSearchParamsПосле обработки данные передаются на сервер. -
application/jsonФормат данных JSON, вам нужно использоватьnew ObjectПосле обработки данные передаются на сервер. -
multipart/form-dataФормат, в котором нужно загрузить файл в форму, нужно использоватьnew FormDataПосле обработки данные передаются на сервер.
«Тогда при настройке типа Content-Type как следует сопоставлять бэкэнд?»
Он немного подумал и сказал: «Я так не думаю».
Далее я спросил: «Что нужно делать серверной части, если токен настроен в заголовке».
«Это не очень понятно, я не знаю.», — подумал я, если бы я сам настроил, я бы столкнулся с этими проблемами, которые приведут к междоменному.
Я продолжал спрашивать: «Знаете ли вы, что такое перекрестный домен CORS?»
«Это не очень ясно».
«Тогда как вы обычно работаете с междоменными доменами?»
«Все это обрабатывается серверной частью».
Этот задний конец действительно внимательный. серверная частьAccess-Control-Allow-HeadersЧтобы настроить"content-type,token".
«Тогда, если серверная часть должна аутентифицироваться с помощью файлов cookie, как ее настроить?»
axios.defaults.withCredentials=true;
На самом деле, очень хочется спросить у него, как настроить соответствующий бэкенд, если он его на самом деле настроил, то велика вероятность, что он столкнется с проблемами. Бэкенд должен быть настроен с двумя точками
- Пучок
Access-Control-Allow-CredentialsУстановлено значение true, указывающее, что сервер согласен принимать файлы cookie. -
Access-Control-Allow-Originне может быть установлено на*, необходимо указать четкое, согласованное доменное имя с запрошенной веб-страницей. Такие какAccess-Control-Allow-Origin: "localhost:8037".
«Расскажите мне о роли baseURL и правилах слияния?»
«baseURL — это базовый путь адреса запроса, который будет автоматически добавлен вurlспереди, если толькоurlявляется абсолютным URL, то есть сhttp://илиhttps://из. "
«Если серверная часть возвращает данные типа двоичного потока, как вы настроите его для их получения. Запишите это»
service.post('xxx',data,{responseType:'blob'});
service.get('xxx',{params:data, responseType:'blob'})
«Как решить проблему искажения точности, если id, возвращаемый бэкендом, имеет числовой тип?»
«Искажение точности, этот сервер должен справиться с этим, вы не сталкивались с этим?»
Отлично? На самом деле, эта проблема определенно будет возникать после появления все большего количества функциональных модулей проекта. Но этот интервьюер лучше предыдущего в этом аспекте аксиом.
Этот вопрос проверяет многие точки знаний.
- Что такое прецизионное искажение? Числовой тип js имеет максимальное значение (значение безопасности). То есть 2 в 53-й степени — это 9007199254740992. Если оно превышает это значение, то у js будут проблемы с неточностью. Это значение составляет 16 бит.
- Как произвести прецизионное искажение? На самом деле значение, возвращаемое бэкендом интерфейсу, представляет собой строку JSON. axios будет использовать JSON.parse для преобразования устройства в объект json по умолчанию.Когда JSON.parse анализирует значение, содержащее более 16 цифр, возникает искажение точности.
- Чтобы решить эту проблему, нам нужно использовать параметр конфигурации axios для преобразования ответа. Функция этого параметра состоит в том, чтобы разрешить изменение данных ответа перед их передачей в then/catch. Сначала мы можем использовать обычные и
replace()Заменить все значения с более чем 16 цифрами в возвращаемых данных на строки, а затем использовать JSON.parse() для преобразования их в объекты JSON.
transformResponse: function (data) {
data = data.replace(/"\w+":\s*\d{16,}/g, function (longVal) {
let split = longVal.split(":");
return split[0] + ':' + '"' + split[1].trim() + '"';
});
return JSON.parse(data)
}
4. Вопросы о бизнесе проекта
Содержание проектного бизнеса очень широкое, и я обычно задаю вопросы в следующих трех ситуациях.
- Если проектный опыт в резюме связан с бизнесом компаниисоответствовать, я буду напрямую использовать бизнес в опыте проекта в качестве сцены для оценки
- Если проектный опыт в резюме связан с бизнесом компаниине очень подходит, сначала я спрошу вас, с какими трудностями вы столкнулись в этих проектах, и как потом решить эти трудности, а затем на основе ваших ответов найду точки прорыва, чтобы задать вопросы и оценить, соответствуете ли вы потребностям компании.
- Если описание проектного опыта в резюме очень простое, и из него нельзя получить эффективную информацию, я смоделирую несколько сценариев на основе бизнеса компании для оценки.
Приведу пример третьего случая. Собеседник заявил, что он самостоятельно завершил несколько сложных проектов фоновой системы с помощью корзины семейства Vue.
Поскольку это сложный фоновый системный проект, должны быть сложные формы. Затем давайте проверим его способность отображать страницы на основе данных.
Тип базового пакета определяется типом комбинации пакетов. Когда тип комбинации пакетов является обычным, базовым типом пакета является базовый пакет. Когда тип комбинации пакетов является одноразовым, базовым типом пакета является необязательный пакет. Типы пакетов включают пакеты обновления, топливные пакеты, дополнительные пакеты и дополнительные пакеты.
Параметры раскрывающегося списка для имени плана определяются оператором связи и типом плана. Можно добавить несколько типов планов и имен планов.
Формат параметра, полученный серверной частью, следующий:
data:{
type:'',//套餐组合类型
operators:'',//运营商
packagelist:[
{
packageType:'',//套餐类型
packageName:'',//套餐名称
isMain:'',//是否是基础套餐,1是,0不是.
}
]
}
Напишите как это сделать. Этот бизнес-сценарий очень сценический по форме.Если вы сделали несколько фоновых системных проектов, это должно быть очень просто. Ответ писать не буду, вы сами можете подумать, как его добиться.
3. Навыки
Лично я считаю, что владение навыками можно разделить на 4 уровня.
- Понимание: слышали об этом навыке, знаете концепцию этой технологии и какие функции она использует для достижения.
- Знакомство: его можно использовать с документом навыка.
- Профессионализм: Может быть разработан без документации, может быть дополнительно инкапсулирован.
- Опытный: Зная принцип этого навыка, вы можете модифицировать и оптимизировать его.
Эти четыре уровня, многие статьи будут представлять, здесь нечего сказать.
Я хочу подчеркнуть, что,
- Не используйте этот навык, если вы не использовали его во многих проектах.
熟练чтобы описать ваше мастерство в этом навыке. - Используйте с осторожностью
精通Чтобы описать ваше мастерство в этом навыке, после того, как вы его используете, вас спросят, почему вы его используете (принцип), а не только как вы его используете.
В-четвертых, напишите в конце
Хотя говорят, что резюме — это ступенька, но если резюме написано лучше, ступенька будет тяжелее и откроет двери большему количеству компаний. Но задумывались ли вы когда-нибудь, как долго вы сможете продержаться на собеседовании, если эта ступенька слишком тяжелая? В итоге сломал ногу.
Лично я считаю, что резюме — это не только ступенька, но и план противостояния между вами и интервьюером, за него отвечает каждое предложение в резюме, и вы хотите знать, сможете ли вы контролировать это предложение. Если вы не можете это контролировать, очень жаль, что вы показываете свои недостатки интервьюеру.
Индивидуумы не отвергают поддельные резюме, Пока у вас есть смелость подделать его, вы хорошо знаете каждый поддельный проектный опыт и поддельные навыки, и подделка станет настоящей.
Конечно, свой трудовой стаж лучше не подделывать, ведь свой трудовой стаж можно увидеть в платежных ведомостях системы медицинского и соцзащиты.