2020-11-30

吃通js正则表达式

体验正则表达式的魅力:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // 获取字符串中所有的数值  let str = 'cyy2020cyy2xxx';  //不使用正则的情况  let nums = [...str].filter(item => !Number.isNaN(parseInt(item))).join('');  console.log(nums);  // 使用正则的情况  let num2 = str.match(/\d/g).join('');  console.log(num2); </script></body></html>

 

字面量创建正则表达式:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = 'cyy2020cyy2xxx';  console.log(/cyy/.test(str));  //不能直接使用变量  let word = 'cyy';  console.log(/word/.test(str));  //使用这种方式,使用变量  console.log(eval(`/${word}/`).test(str)); </script></body></html>

 

使用对象创建正则表达式:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <div>这里是cyy用来检测正则的测试文本~~~</div> <script>  // let str = 'cyy2020cyy2xxx';  // //第二个参数是模式  // let reg = new RegExp('cyy', 'g');  // console.log(reg.test(str));  // //使用变量  // let word = 'cyy';  // let reg2 = new RegExp(word, 'g');  // console.log(reg2.test(str));  //demo  let text = prompt('请输入要检测的文本,支持正则');  let reg = new RegExp(text, 'g');  let div = document.querySelector('div');  div.innerHTML = div.innerHTML.replace(reg, search => {   return `<span >${search}</span>`;  }); </script></body></html>

 

选择符的使用:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = 'cyy000';  // |代表选择符,符号左边的表达式或者右边的表达式是否满足  // 左边匹配的是cyy,而不是一个y  console.log(/cyy|x/.test(str));  let tel = '010-8888888';  console.log(/^(010|020)\-\d{7,8}$/.test(tel)); </script></body></html>

 

原子表与原子组中的选择符:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // 原子表  let str = '1122334455';  let reg = /[1234567]/;  console.log(str.match(reg));  //原子组  let str2 = '1122334455';  let reg2 = /(11|44)/g;  console.log(str2.match(reg2)); </script></body></html>

 

 

转义需要好好理解:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // .代表除换行符外的所有字符  // let price = 33.47;  // console.log(/\d+\.\d+/.test(price));  //对象创建的正则需要双重转义  // let price = 33.47;  // let reg = new RegExp('\d+\.\d+');  // console.log(reg);  // console.log(reg.test(price));  let price = 33.47;  let reg = new RegExp('\\d+\\.\\d+');  console.log(reg);  console.log(reg.test(price)); </script></body></html>

 

字符边界约束:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <input type="text" name='user'> <span style='color:red;'></span> <script>  document.querySelector('[name=user]').addEventListener('keyup', function () {   console.log(this.value);   let flag = this.value.match(/^[a-z]{3,5}$/);   document.querySelector('span').innerHTML = flag ? '成功' : '失败';  }); </script></body></html>

 

数值与空白元字符:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // let str = '20201111';  // console.log(str.match(/\d/));  // // 模式符g 全局匹配  // console.log(str.match(/\d/g));  //获取电话号码  // let tel = "'姓名: 'cyy', 电话: 010-1111111; 姓名: 'cyy2', 电话: 030-99999999";  // console.log(tel.match(/\d{3}-\d{7,8}/g));  //获取中文 [^]表示方括号里面的都不要  let tel = "'姓名: 'cyy', 电话: 010-1111111; 姓名: 'cyy2', 电话: 030-99999999";  console.log(tel.match(/[^':,-\da-z\s;]+/g));  //\d 数字 \D 非数字  // let tel = "'姓名: 'cyy', 电话: 010-1111111; 姓名: 'cyy2', 电话: 030-99999999";  // console.log(tel.match(/\D+/g));  // \s匹配空白,包括空格和换行符  // let str = ' 11\n';  // console.log(str.match(/\s/g));  // \S匹配非空白,包括空格和换行符  let str = ' 11\n';  console.log(str.match(/\S+/g)); </script></body></html>

 

w与W元字符:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // \w 字母数字下划线  // let str = 'cyy123_-@@';  // console.log(str.match(/\w+/));  // let email = '965794175@qq.com';  // console.log(email.match(/^\w+@\w+\.\w+$/));  // 5-10为字母数字下划线,并且是字母开头  let user = prompt('请输入用户名');  console.log(user.match(/^[a-z]\w{4,9}$/)); </script></body></html>

 

点元字符的使用:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // . 除空白符之外的所有字符  // let str = 'cswj+4!j@;;';  // console.log(str.match(/.+/)); //这里的+是贪婪模式  // .需要转义  // let str = 'https://www.baidu.com';  // console.log(str.match(/^https?:\/\/\w+\.\w+\.\w+$/));   // .需要转义  // let str = `  // www.baidu.com  // www.taobao.com  // `;  // console.log(str.match(/.+/));  // // s模式符:忽略换行符  // console.log(str.match(/.+/s));   let tel = '010 - 12345678';  console.log(tel.match(/\d{3} - \d{8}/));  console.log(tel.match(/\d{3}\s-\s\d{8}/)); </script></body></html>

 

如何精巧的匹配所有字符:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = `  <span>   cyy @@@   hahahah  </span>  `;  console.log(str.match(/[\w\W]+/));  console.log(str.match(/[\d\D]+/)); </script></body></html>

 

i与g模式修饰符:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = 'cyyCyy';  console.log(str.match(/c/i));  console.log(str.match(/c/g));  console.log(str.match(/c/gi));  console.log(str.replace(/c/gi, '@')); </script></body></html>

 

m多行匹配修正符实例:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = `  #1 js,200元 #  #2 html,104元 #  #3 css # cyy  `;  let lessons = str.match(/^\s*#\d+\s+.+\s+#$/gm).map(item => {   item = item.replace(/^\s*#\d+\s*/, '').replace(/\s+#/, '');   [name, price] = item.split(',');   return { name, price };  });  console.log(lessons); </script></body></html>

 

 

汉字与字符属性:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // u修饰符:正确处理四个字符的 UTF-16 编码  //每个字符都有属性,如L属性表示是字母,P 表示标点符号,需要结合 u 模式才有效。  //其他属性简写可以访问 https://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt 网站查看。  // let str = 'cyy2020.永远最棒棒~';  // console.log(str.match(/\p{L}/gu));//字母  // console.log(str.match(/\p{N}/gu));//数字  // console.log(str.match(/\p{P}/gu));//标点符号  //找中文  //字符也有unicode文字系统属性 Script=文字系统,下面是使用 \p{sc=Han} 获取中文字符 han为中文系统  //其他语言请查看  // console.log(str.match(/\p{sc=Han}/gu));  let str = '𝒳𝒴';  console.log(str.match(/[𝒳𝒴]/));//单独匹配时乱码  console.log(str.match(/[𝒳𝒴]/u));//正确识别宽字节 </script></body></html>

 

lastIndex属性的作用:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = 'cyy is a girl';  // console.log(str.match(/\w/));  // console.log(str.match(/\w/g)); //没有组信息  //非全局模式下lastIndex不会向后走  // let reg = /\w/;  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  //全局模式下lastIndex会向后走  let reg = /\w/g;  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  while (res = reg.exec(str)) {   console.log(res);  } </script></body></html>

 

有效率的y模式:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // y粘连模式,必须连续  // let str = 'yycyyccc';  // let reg = /yy/g;  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // let reg = /yy/y;  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  let str = 'cyy的qq群是:1111111,2222222,3333333,cyy的年龄是:18';  let reg = /(\d+),?/y;  reg.lastIndex = 9;  // console.log(reg.exec(str));  // console.log(reg.exec(str));  // console.log(reg.exec(str));  let qq = [];  while (res = reg.exec(str)) {   qq.push(res[1]);  }  console.log(qq); </script></body></html>

 

原子表基本上使用:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // let str = '123456';  // console.log(str.match(/[246]/g));  // let str = '2020-11-28';  // let str2 = '2020/11/28';  // console.log(str.match(/^\d{4}[-\/]\d{2}[-\/]\d{2}$/g));  // console.log(str2.match(/^\d{4}[-\/]\d{2}[-\/]\d{2}$/g));  //分隔符必须一致  let str = '2020-11/28';  let str2 = '2020/11/28';  console.log(str.match(/^\d{4}([-\/])\d{2}\1\d{2}$/g));  console.log(str2.match(/^\d{4}([-\/])\d{2}\1\d{2}$/g)); </script></body></html>

 

区间匹配:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <input type="text" name='user'> <script>  // let str = '1234';  // console.log(str.match(/[0-9]+/g));  // let str = 'abcd1234';  // console.log(str.match(/[a-z]+/g));  let input = document.querySelector('[name=user]');  input.addEventListener('keyup', function () {   console.log(this.value.match(/[a-z]\w{3,5}/));  }) </script></body></html>

 

排除匹配:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // let str = '1234';  // console.log(str.match(/[12]/g));  // console.log(str.match(/[^12]/g));  let str = 'cyy是小仙女呀';  console.log(str.match(/[^\w]+/g));  console.log(str.match(/\p{sc=Han}+/gu)); </script></body></html>

 

原子表字符不解析:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = '(cyy.)';  // ()在这里代表原子组  // console.log(str.match(/()/g));  // ()在这里代表普通括号  // console.log(str.match(/[()]/g));  // .在这里表示除空白符外的所有字符  console.log(str.match(/.+/g));  // .在这里表示.符号本身  console.log(str.match(/[.+]/g)); </script></body></html>

 

使用原子表匹配所有内容:

 

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = `  cyy1  cyy2  `;  console.log(str.match(/.+/));//无法匹配换行符  console.log(str.match(/.+/s));//可以匹配换行符  console.log(str.match(/[\s\S]+/));  console.log(str.match(/[\d\D]+/));  console.log(str.match(/[\w\W]+/)); </script></body></html>

 

正则操作DOM:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <p>p</p> <h1>h1</h1> <h3>h3</h3> <script>  let reg = /<(h[1-6])>[\s\S]*<\/\1>/gi;  document.body.innerHTML = document.body.innerHTML.replace(reg, ''); </script></body></html>

 

认识原子组:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = `<h1>h1</h1>   <h2>h2</h2>`;  let reg = /<(h[1-6])>[\s\S]*<\/\1>/gi;  console.log(str.match(reg)); </script></body></html>

 

邮箱验证中原子组的使用:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <input type="email" name="email" value="965794175@qq.com.cn"> <script>  let reg = /[\w-]+@([\w-]+\.)+(com|cn|cc|net|org)/gi;  let email = document.querySelector('[name=email]').value;  console.log(email.match(reg)); </script></body></html>

 

原子组引用完成替换操作:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = `  <h1>h1</h1>  <div>div</div>  <h3>h3</h3>`;  //把h1-h6替换成p  let reg = /<(h[1-6])>([\s\S]+)<\/\1>/gi;  console.log(str.match(reg));  console.log(str.replace(reg, `<p>$2</p>`));  let res = str.replace(reg, (p0, p1, p2) => {   // console.log(p0, p1, p2);   return `<p>${p2}</p>`;  });  console.log(res); </script></body></html>

 

嵌套分组与不记录组:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = `  https://www.baidu.com  http://www.baidu.com  https://baidu.com  `;  //获取域名  // ? 表示可有可无  // 圆括号里 ?: 表示不记录组  let reg = /https?:\/\/((?:\w+\.)?\w+\.(?:com|cn|net|org|cc))/gi;  // console.log(reg.exec(str));  let urls = [];  while (res = reg.exec(str)) {   // console.log(res);   urls.push(res[1]);//0是原数组,1是第一个分组  }  console.log(urls); </script></body></html>

 

多种重复匹配基本使用:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // let str = 'cyy';  // + 1个或者多个,贪婪匹配  // console.log(str.match(/cy+/));  // let str = 'c';  // * 0个或者多个,贪婪匹配  // console.log(str.match(/cy*/));  // let str = 'cy';  // // ? 0个或者1个,贪婪匹配  // console.log(str.match(/cy?/));  let str = 'cyy';  // {} 表示范围,贪婪匹配  console.log(str.match(/cy{2,5}/)); </script></body></html>

 

重复匹配对原子组的影响与电话号正则:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // let str = 'cyyyyycycycy';  // console.log(str.match(/(cy)+/g));  let tel = '010-1234567';  console.log(tel.match(/^0\d{2,3}-\d{7,8}$/g)); </script></body></html>

 

网站用户名验证 :

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <input type="text" name='username'> <script>  document.querySelector('[name=username]').addEventListener('keyup', (e) => {   let value = e.target.value;   //用户名3-8位,字母数字下划线,字母开头   console.log(value.match(/^[a-z][\w-]{2,7}$/i));  }) </script></body></html>

 

批量使用正则完成密码验证:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <input type="text" name='pwd'> <script>  document.querySelector('[name=pwd]').addEventListener('keyup', (e) => {   let value = e.target.value;   //密码是数字或者字母5-10位,并且必须包含大写字母和数字   let regs = [    /^[a-z0-9]{5,10}$/i,    /[A-Z]/,    /\d/   ];   let res = regs.every(reg => reg.test(value));   console.log(res);  }); </script></body></html>

 

禁止贪婪:

 

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = 'cyyyyyy';  // console.log(str.match(/cy+/));//默认贪婪  // console.log(str.match(/cy+?/));//禁止贪婪  // console.log(str.match(/cy*/));//默认贪婪  // console.log(str.match(/cy*?/));//禁止贪婪  // console.log(str.match(/cy{2,6}/));//默认贪婪  // console.log(str.match(/cy{2,6}?/));//禁止贪婪  // console.log(str.match(/cy{2,}/));//默认贪婪  // console.log(str.match(/cy{2,}?/));//禁止贪婪  console.log(str.match(/cy?/));//默认贪婪  console.log(str.match(/cy??/));//禁止贪婪 </script></body></html>

 

标签替换的禁止贪婪使用:

 

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <main>  <span>cyy1</span>  <span>cyy2</span>  <span>cyy3</span> </main> <script>  //把span换成h4,标红,前缀加上小可爱-  const main = document.querySelector('main');  // ?禁止贪婪  let reg = /<span>([\s\S]+?)<\/span>/ig;  main.innerHTML = main.innerHTML.replace(reg, (res, h1) => {   return `<h4 style="color:red;">小可爱-${h1}</h4>`;  }); </script></body></html>

 

 

使用matchAll完成全局匹配:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <h1>cyy1</h1> <h2>cyy2</h2> <h3>cyy3</h3> <script>  let reg = /<(h[1-6])>([\s\S]+?)<\/\1>/ig;  console.log(document.body.innerHTML.match(reg));  console.log(document.body.innerHTML.matchAll(reg));  let res = document.body.innerHTML.matchAll(reg);  let arr = [];  for (const iterator of res) {   console.dir(iterator);   arr.push(iterator[2]);  }  console.table(arr); </script></body></html>

 

 

 

为低端浏览器定义原型方法matchAll

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <h1>cyy1</h1> <h2>cyy2</h2> <h3>cyy3</h3> <script>  String.prototype.matchAll = function (reg) {   let res = this.match(reg);   // console.log(res);   if (res) {    let str = this.replace(res[0], '^'.repeat(res[0].length));    let match = str.matchAll(reg) || [];    return [res, ...match];   }  }  let body = document.body.innerHTML;  let res = body.matchAll(/<(h[1-6])>([\s\S]+?)<\/\1>/ig);  console.log(res); </script></body></html>

 

使用exec完成全局匹配:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <h1>cyy1</h1> <h2>cyy2</h2> <h3>cyy3</h3> <script>  // let str = 'cyyccyy';  // let reg = /y/gi;//必须加上g修饰符,lastIndex才会发生改变  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // console.log(reg.exec(str));  // console.log(reg.lastIndex);  // let arr = [];  // while (res = reg.exec(str)) {  //  arr.push(res);  // }  // console.log(arr);  let arr = [];  function search(str, reg) {   while (res = reg.exec(str)) {    arr.push(res);   }   return arr;  }  search(document.body.innerHTML, /<(h[1-6])>[\s\S]+?<\/\1>/gi);  console.log(arr); </script></body></html>

 

字符串正则方法search与match

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // search 字符串的搜索  // let str = 'yyccyy';  // console.log(str.search('c'));  // console.log(str.search(/c/g));  // match 字符串的匹配  // let str = 'yyccyy';  // console.log(str.match('c'));  // console.log(str.match(/c/g));  let str = `  https://www.baidu.com  http://www.taobao.com.cn  https://google.cn  `;  let reg = /https?:\/\/(\w+\.)?(\w+\.)+(com|cn|net|org|cc)/gi;  console.log(str.match(reg)); </script></body></html>

 

字符串正则方法matchAll与split

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // search 字符串的搜索  // let str = 'yyccyy';  // console.log(str.search('c'));  // console.log(str.search(/c/g));  // match 字符串的匹配  // let str = 'yyccyy';  // console.log(str.match('c'));  // console.log(str.match(/c/g));  // let str = `  // https://www.baidu.com  //  // https://google.cn  // `;  // let reg = /https?:\/\/(\w+\.)?(\w+\.)+(com|cn|net|org|cc)/gi;  // console.log(str.match(reg));  // let reg = /https?:\/\/(?:\w+\.)?(?:\w+\.)+(?:com|cn|net|org|cc)/gi;  // let res = str.matchAll(reg);  // for (const iterator of res) {  //  console.log(iterator);  // }  let str = '2020-11-30';  let str2 = '2020/11/30';  console.log(str.split(/[-\/]/));  console.log(str2.split(/[-\/]/)); </script></body></html>

 

$符在正则替换中的使用:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // let str = '2020/11/30';  // console.log(str.replace(/[\/]/, '-'));  // console.log(str.replace(/[\/]/g, '-'));  // let str = '(010)99999999 (020)8888888';  // let reg = /\((\d{3,4})\)(\d{7,8})/g;  // console.log(str.match(reg));  // console.log(str.replace(reg, "$1-$2"));  let str = '=cyy=';  // $& 匹配到的内容 $` 匹配内容的左边 $' 匹配内容的右边  console.log(str.replace(/cyy/, "$`可爱$&可爱$'")); </script></body></html>

 

 

$&使用

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <main>cyy喜欢吃炒年糕,cyy也喜欢吃汤年糕</main> <script>  const main = document.querySelector('main');  main.innerHTML = main.innerHTML.replace(/年糕/g, "<a href='http://www.baidu.com'>$&</a>") </script></body></html>

 

 

原子组在替换中的使用技巧:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <main>  <a href="http://www.baidu.com" style='color:pink'>baidu</a>  <a id='link' href="http://baidu.com">baidu</a>  <a href="http://google.com">baidu</a>  <h4>http://www.baidu.com</h4> </main> <script>  const main = document.querySelector('main');  let reg = /(<a.*href=['"])(http)(:\/\/)(www\.)?(baidu)/gi;  main.innerHTML = main.innerHTML.replace(reg, (v, ...args) => {   console.log(args);   args[1] += 's';   args[3] = args[3] || 'www.';   return args.splice(0, 5).join('');  }); </script></body></html>

 

原子组别名:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let str = `  <h1>h1</h1>  <span>span</span>  <h4>h4</h4>  `;  // let reg = /<(h[1-6])>(.*?)<\/\1>/gi;  // console.log(str.replace(reg, "<div>$2</div>"));  //起别名  let reg = /<(h[1-6])>(?<con>.*?)<\/\1>/gi;  console.log(str.replace(reg, "<div>$<con></div>")); </script></body></html>

 

使用原子组别名优化正则:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <main>  <a href="https://www.baidu.com">baidu</a>  <a href="https://www.taobao.com">taobao</a>  <a href="https://www.google.com">google</a> </main> <script>  // [{link:,title:}]  const main = document.querySelector('main');  // let reg = /<a.*?href=(['"])(?<link>.*?)\1>(?<title>.*?)<\/a>/i;  // console.log(main.innerHTML.match(reg));  let reg = /<a.*?href=(['"])(?<link>.*?)\1>(?<title>.*?)<\/a>/gi;  let arr = [];  for (const iterator of main.innerHTML.matchAll(reg)) {   console.log(iterator['groups']);   arr.push(iterator['groups']);  }  console.table(arr); </script></body></html>

 

 

正则方法test

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <input type="text" name='email'> <script>  const mail = document.querySelector('[name=email]');  mail.addEventListener('keyup', (e) => {   let value = e.target.value;   let res = /^[\w-]+@[\w+\.]+(com|cn|org|cc)$/i.test(value);   console.log(res);  }) </script></body></html>

 

正则方法exec

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <main>  cyy非常可爱,cyy到底有多可爱?baidu.com </main> <script>  const mail = document.querySelector('main').innerHTML;  let reg = /cyy/gi;  // console.log(mail.match(reg));  // console.log(reg.exec(mail));  // console.log(reg.lastIndex);  // console.log(reg.exec(mail));  // console.log(reg.lastIndex);  // console.log(reg.exec(mail));  // console.log(reg.lastIndex);  let count = 0;  while (res = reg.exec(mail)) {   count++;  }  console.log(count); </script></body></html>

 

?=  断言匹配:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <main>  cyy非常可爱,cyy可爱就可爱在…… </main> <script>  const main = document.querySelector('main');  let reg = /cyy(?=可爱)/gi;  main.innerHTML = main.innerHTML.replace(reg, '<a href="https://www.baidu.com">$&</a>'); </script></body></html>

 

 

使用断言规范价格:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // 给所有金钱补上 .00 格式  let lessons = `  js,200元,300次  html,300.00元,105次  css,140元,260次  `;  let reg = /(\d+)(\.00)?(?=元)/gi;  let res = lessons.replace(reg, (v, ...args) => {   console.log(args);   args[1] = args[1] || '.00';   return args.splice(0, 2).join('');  });  console.table(res); </script></body></html>

 

?<= 断言匹配

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <main>  <a href="https://www.baidu.com">baidu</a>  <a href="https://www.google.com">google</a> </main> <script>  // let str = 'cyy123ccc098';  // let reg = /(?<=cyy)\d+/gi;  // console.log(str.match(reg));  const main = document.querySelector('main');  const reg = /(?<=href=(["'])).+(?=\1)/gi;  // console.log(main.innerHTML.match(reg));  main.innerHTML = main.innerHTML.replace(reg, 'http://www.taobao.com'); </script></body></html>

 

使用断言模糊电话号:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  let users = `  cyy1电话:12345678911  cyy2电话:99999678911  `;  let reg = /(?<=\d{7})\d{4}/gi;  users = users.replace(reg, '*'.repeat(4));  console.log(users); </script></body></html>

 

 

?!断言匹配:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // ?= 后面是什么  // ?! 后面不是什么  let str = 'cyy2020ccc';  let reg = /[a-z]+(?!\d)/gi; // 错误  let reg = /[a-z]+(?!\d)$/gi; // 正确  console.log(str.match(reg)); </script></body></html>

 

断言限制用户名关键词:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <input type="text" name='user'> <script>  //要求注册名中不能包含cyy  let input = document.querySelector('[name=user]');  input.addEventListener('keyup', function () {   // let reg = /^(?!.*cyy.*).*/gi;   let reg = /^(?!.*cyy.*)[a-z]{5,6}$/gi;   console.log(this.value.match(reg));  }) </script></body></html>

 

?<!断言匹配:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <script>  // ?<! 限制前面不是什么  let str = 'cyy999ccc';  let reg = /^(?<!\d+)[a-z]+/gi;  console.log(str.match(reg)); </script></body></html>

 

使用断言排除法统一数据:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title></head><body> <main>  <a href="https://www.baidu.com/1.jpg">1.jpg</a>  <a href="https://oss.baidu.com/2.jpg">2.jpg</a>  <a href="https://cdn.baidu.com/3.jpg">3.jpg</a>  <a href="https://baidu.com/4.jpg">4.jpg</a> </main> <script>  // ?<! 限制前面不是什么  const main = document.querySelector('main');  //过滤oss  let reg = /https:\/\/([a-z]+)?(?<!oss)\..+?(?=\/)/gi;  main.innerHTML = main.innerHTML.replace(reg, (v) => {   return 'https://oss.baidu.com';  }); </script></body></html>

 









原文转载:http://www.shaoqun.com/a/494416.html

环球华网:https://www.ikjzd.com/w/1063

wish:https://www.ikjzd.com/w/105

square:https://www.ikjzd.com/w/2106


体验正则表达式的魅力:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"
立刻网:立刻网
tineye:tineye
【泰国旅游安全吗】--泰国旅游安全情况:【泰国旅游安全吗】--泰国旅游安全情况
2018年末,亚马逊,ebay,wish,速卖通你应该选择谁(2):2018年末,亚马逊,ebay,wish,速卖通你应该选择谁(2)
日本北海道的最佳旅游时间是什么时候?:日本北海道的最佳旅游时间是什么时候?

hibernate一对多,细节讲解

1.一对多

 1).首先创建两个实体类studeninfo.java跟studentxxb.java

    1)studentinfo.java表如图:

package model;import java.util.Date;import java.util.HashSet;import java.util.Set;public class studentinfo {	private Integer id;	private String name;	private String aihao;	private Date sjina;	private Set<studentxxb> studentxxbs=new HashSet<>();	public studentinfo() {		super();	}	public studentinfo(Integer id, String name, String aihao, Date sjina, Set<studentxxb> studentxxbs) {		super();		this.id = id;		this.name = name;		this.aihao = aihao;		this.sjina = sjina;		this.studentxxbs = studentxxbs;	}	@Override	public String toString() {		return "studentinfo [id=" + id + ", name=" + name + ", aihao=" + aihao + ", sjina=" + sjina + ", studentxxbs="				+ studentxxbs + "]";	}	public Integer getId() {		return id;	}	public void setId(Integer id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getAihao() {		return aihao;	}	public void setAihao(String aihao) {		this.aihao = aihao;	}	public Date getSjina() {		return sjina;	}	public void setSjina(Date sjina) {		this.sjina = sjina;	}	public Set<studentxxb> getStudentxxbs() {		return studentxxbs;	}	public void setStudentxxbs(Set<studentxxb> studentxxbs) {		this.studentxxbs = studentxxbs;	}}

  

   2)stdentxxb.java如下图:

    

package model;import java.util.Date;public class studentxxb {	private Integer id;	private String dhua;	private String diz;	private studentinfo studentinfos;	public studentxxb() {		super();	}	public studentxxb(Integer id, String dhua, String diz, studentinfo studentinfos) {		super();		this.id = id;		this.dhua = dhua;		this.diz = diz;		this.studentinfos = studentinfos;	}	@Override	public String toString() {		return "studentxxb [id=" + id + ", dhua=" + dhua + ", diz=" + diz + ", studentinfos=" + studentinfos + "]";	}	public Integer getId() {		return id;	}	public void setId(Integer id) {		this.id = id;	}	public String getDhua() {		return dhua;	}	public void setDhua(String dhua) {		this.dhua = dhua;	}	public String getDiz() {		return diz;	}	public void setDiz(String diz) {		this.diz = diz;	}	public studentinfo getStudentinfos() {		return studentinfos;	}	public void setStudentinfos(studentinfo studentinfos) {		this.studentinfos = studentinfos;	}}

  2).两个实体类创建好了,接下来配置两个实体类的hbm.

      1).实体类studentinfo.java的配置(studentinfp-mapping.hbm.

        

<?

  

      2). 实体类studentxxb.java的配置(studentxxb-mapping.hbm.

          

<?            		<many-to-one name="studentinfos" column="student_infos"></many-to-one>			</class></hibernate-mapping>

  3)接下来配置cfg.

    

<?

  4)测试类 Testmain.java:

    

package test;import java.util.Date;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import model.studentinfo;import model.studentxxb;public class Testmain1 {	public static void main(String[] args) {			Session session=new Configuration().configure().buildSessionFactory().openSession();			 Transaction tt=session.beginTransaction();			 			 studentinfo studentinfo=new studentinfo();			 studentinfo.setName("王胖子");			 studentinfo.setAihao("爬山");			 studentinfo.setSjina(new Date());			 			 studentxxb xxb=new studentxxb();			 xxb.setDiz("是是是");			 xxb.setDhua("1111111");			 studentinfo.getStudentxxbs().add(xxb);			 xxb.setStudentinfos(studentinfo);			 session.save(xxb);			 session.save(studentinfo);			 tt.commit();			 session.close();	}}

  5)控制台运行结果:

    

 

 

 

 

 

   6)数据库运行结果:

          

 

 

 *先导包

 

 

    

 









原文转载:http://www.shaoqun.com/a/494414.html

沃尔码:https://www.ikjzd.com/w/220

易速:https://www.ikjzd.com/w/2389

c88是什么:https://www.ikjzd.com/w/1017.html


1.一对多 1).首先创建两个实体类studeninfo.java跟studentxxb.java    1)studentinfo.java表如图:packagemodel;importjava.util.Date;importjava.util.HashSet;importjava.util.Set;publicclassstudentinfo{ privateIntegerid; priva
锦桥纺织网:锦桥纺织网
tiki:tiki
去厦门旅游如何打车?:去厦门旅游如何打车?
泉州购物指引 - :泉州购物指引 -
日本传统节日简介 :日本传统节日简介

惊!亚马逊黑五因假货店铺大批量被封,怎么申诉?

惊!亚马逊黑五因假货店铺大批量被封,怎么申诉?

 今年亚马逊黑五期间特别热闹,问题频繁爆出,其中包括:亚马逊广告系统崩溃、卖家整个黑五零单、黑五店铺刚爆单收到亚马逊邮件被停止销售。然而邮件内容统一为涉嫌卖假货,作者通过查看多个卖家店铺发现他们都存在一下几个共同点。

亚马逊黑五因假货店铺大批量被封你遇到了吗

分析假货问题有可能被恶心投诉

有些店铺一直在正常出单,在此之前一直没有问题,黑五期间突然收到投诉,除了少部分有可能为真实买家投诉,其中一部分为同行竞争恶意投诉导致店铺被停。

被系统自动检测涉嫌销售假货

这类店铺一般分为两种:1、店铺在黑五之前一直订单较少或没有订单,在黑五期间订单突然暴涨,导致店铺被系统检测为异常,存在刷单行为,从而要求证明订单真实性。2、店铺上了大量产品,而订单却很少或没有订单,同时又不投放任何广告,这类店铺却占用大量亚马逊数据资源,对平台没有任何价值,因此亚马逊在清理。亚马逊在七月份清理了大批因虚假资料注册的店铺,当是为密码错误,修改密码之后登陆店铺显示账户异常,到目前为止还没有发现一列成功申诉的店铺。而这次情况有所不同,亚马逊只是要求提供商品渠道的真实性以及正规品牌授权。

店铺涉嫌卖假货怎么申诉

1、准备绩效邮件中列出的产品采购订单截图,发票或者收据,以及物流轨迹截图。开票数量需要和店铺后台商品数量保持一致,近可能多开数量。

2、提供产品发布所用的品牌授权书,如自有品牌需提供品牌注册书和品牌所有的营业执照或者身份证。

3、提供商品供应商联系方式,包括:供应商名称、电话、地址、电子邮件、网站(网址)。

4、申诉邮件内容应包含店铺的运营状况,目前对店铺采取了那些措施,比如对所有产品下架并逐一检查货源渠道,对店铺的改进计划应包括,今后在上架产品前对进货渠道进行验证检查,确认产品符合亚马逊平台规则要求之后进行上架等。

对于在正规厂商进货,有正规品牌的店铺申诉成功率较高,而对于用品牌白名单的店铺,由于品牌名称并没有注册,品牌商品跟厂家提供的产品品牌不一致,一方面自己无法提供自己店铺的品牌授权,另外一方面即使提供厂家的品牌授权,而跟自身店铺发布产品所用的品牌无法保持一致,最终很大程度会导致申诉失败。

最近半年以来亚马逊审核速度放缓,这导致申诉时间较长,一般需要22天左右,如因为其他原因有可能更长,请大家提交申诉后需耐心等待即可。(来源:跨境小哥)

以上内容属作者个人观点,不代表立场!本文经原作者独家授权供稿,转载需经授权同意。


(来源:卖家之家)

文章来源:https://www.ikjzd.com/home/135383

丰趣海淘:https://www.ikjzd.com/w/1716

mil:https://www.ikjzd.com/w/1285

心怡科技:https://www.ikjzd.com/w/1327

weebly:https://www.ikjzd.com/w/2486

aicpa:https://www.ikjzd.com/w/1373

惊!亚马逊黑五因假货店铺大批量被封,怎么申诉?

今年亚马逊黑五期间特别热闹,问题频繁爆出,其中包括:亚马逊广告系统崩溃、卖家整个黑五零单、黑五店铺刚爆单收到亚马逊邮件被停止销售。然而邮件内容统一为涉嫌卖假货,作者通过查看多个卖家店铺发现他们都存在一下几个共同点。分析假货问题有可能被恶心投诉有些店铺一直在正常出单,在此之前一直没

宝藏站点捂不住了!北美这两大蓝海站点即将起飞!

宝藏站点捂不住了!北美这两大蓝海站点即将起飞!

亚马逊北美站点包含美国、加拿大、墨西哥三个站点!也是很多跨境电商卖家掘金海外的第一站。

北美站点的优势不必多说,想必每个卖家都能列举几条:

✦流量巨大,优质Prime会员多;

✦天生好货,中国制造REAL受欢迎;

✦亚马逊物流(FBA)竞争力强、营销资源多样化

今年亚马逊Prime Day期间中国卖家在加拿大和墨西哥站的大获成功,竟让这两个低调的蓝海站点迅速升温。

如果你是正准备入驻美国站的卖家或你已经开通美国站点, 不妨来探索一下加拿大站和墨西哥站,轻松拓宽两个站点,提升销量,何乐而不为!

加拿大站

体量大收入高会花钱,投资回报高的宝藏站点!

加拿大消费者互联网基建完善,热爱网购,且年收入高,消费力强,这样的创业机会和用户怎能让卖家不爱?

偏爱亚马逊,网购热情高涨

亚马逊网站是加拿大主流的电商网站,能够触达半数以上的网购用户,而且亚马逊用户在网站上的活跃度也特别高,且偏爱移动端进行购物。可以说,在加拿大做电商,就选亚马逊!

商机无限,高回报

另外,从往期数据来看,在亚马逊所有站点中,加拿大ACOS(广告投入产出比)都相对较低,这意味着在加拿大站投放广告的投资回报比更高。机会巨大,也不用烧钱烧到心痛,这样的站点,你还不来?

选品周到,爆单不愁

当然,入局一个新站点之前,一定先要了解这个国家的电商消费习惯和选品热点。毕竟7分选品,3分运营。选品选对,销量翻倍!

加拿大站点热销品类包括:

家居/电子产品/厨房用具/无线产品/PC/运动/玩具/相机/服饰/办公用品

墨西哥站

竞争小、增长快,上车的卖家直呼真香!

热衷网购,信赖亚马逊

得益于良好的网民基础,亚马逊墨西哥站(Amazon.mx)发展迅速, 其发展速度甚至比亚马逊加拿大站(Amazon.ca)更快。

特别值得卖家欣慰的是,墨西哥站点目前竞争比较小,仍有很大的增长机会。

用户习惯近美国站,运营物流可借鉴

征战过美国等成熟站点的卖家,完全可以将很多工具运用到墨西哥站,并能获得不错的收效。另外,墨西哥站点的畅销类别,运营和物流以及购买趋势与Amazon.com非常相似,可借鉴经验不少。

抓住蓝海商机,收获投资回报

跟加拿大站点一样,作为一个蓝海站点,墨西哥的ACOS也相对较低,投放广告的投资回报比就相对更高。

墨西哥站点热销品类包括:

电子产品/PC/相机/厨房用品/家居/无线产品/工具/服饰/美容产品/健康护理产品

亚马逊物流远程配送计划

助力北美新老卖家

美国站FBA库存直送加拿大和墨西哥

借助亚马逊物流远程配送计划(Remote Fulfillment with FBA),卖家可以利用储存在美国亚马逊运营中心的FBA库存,配送加拿大和墨西哥的销售订单,省去同时管理三个站点库存、跨境运输,及进口关税等事项。

老卖家·跳出多站点物流难题

即便物流相对于储存在本地会稍慢,这一计划的上线仍让不少美国站卖家摩拳擦掌跃跃欲试,因为卖家可以不用费心了解加拿大和墨西哥站点进口关税和跨境物流的法规,就能轻松拓展北美的销售业务,让很多美国站点的卖家直呼真香!

尤其对于在美国FBA仓有充足库存的卖家而言,无疑是瞌睡遇到了枕头。让卖家在不够了解加拿大和墨西哥站点的情况下,可以通过对美国货存的分配,试水加拿大和墨西哥。

新卖家·打通三国一步到位

如果你是计划入驻北美站的新卖家,同时开通加拿大和墨西哥,在这个物流计划下,符合条件的美国FBA库存可以直通加拿大和墨西哥。如果加拿大或者墨西哥的客户下单,可以使用美国FBA的货存进行供货,可谓提升销量的神器!

亚马逊物流远程配送计划的优势:

库存共享,省钱省力

商品带有Prime标记,快速接单

测款神器,了解新站点


来源:亚马逊全球开店


文章来源:https://www.ikjzd.com/home/135399

csa认证:https://www.ikjzd.com/w/904

刘小东:https://www.ikjzd.com/w/1853

yiqu:https://www.ikjzd.com/w/210

epa认证:https://www.ikjzd.com/w/1769

reverb:https://www.ikjzd.com/w/1273

宝藏站点捂不住了!北美这两大蓝海站点即将起飞!

亚马逊北美站点包含美国、加拿大、墨西哥三个站点!也是很多跨境电商卖家掘金海外的第一站。

2020年经济大萧条,这些Kickstarter产品竟然卖爆了

2020年经济大萧条,这些Kickstarter产品竟然卖爆了


最近,我们迎来了客户最爱集中问的问题——什么产品在国外好卖?

为了系统性地回答这个问题,我们先从美国失业率开始讲起。

据Axios的一份独家采访报道称,美国官方统计全国失业率9月份为7.9%,但该统计将每周挣几美元的人排除在外,人为地压低了官方失业率。真实失业率达到惊人的26.1%。

该数据来自路德维希共同经济繁荣研究所(由前美国货币监理Gene Ludwig创立的研究院)

根据研究院的说法:只有46.1%16岁以上的白人和40.8%的黑人拥有一份全职工作,且年薪超过2万美元。

这意味着,有四分之一的想要工作的美国人,无法赚取到足够生活开支的工资;不到一半的美国人年薪不超过14万人民币。

其实,已有众多全球品牌对这场经济和健康危机做出了反应。比如,三星推出了Galaxy S20 FE,选择廉价的塑料外壳以便把价格压到700美金。Google将旗舰产品Pixel 5的价格降低了100美元。

情况有多严重?

如果失业率与经济衰退呈强正相关,那么,美国将迎来开国以来最大一次经济危机。

让我们回头看看,下图为美国劳工统计局发布:1948年-2020年就业情况,可见曲线图失业率的2大高峰值,一次为2007-2009,美国历史上最大的衰退期之一,08年全球经济危机,当时失业率为10%。

而另一次就是新高,就是现在,失业率最高峰值接近12.5%。

我们再来看看,上次的经济萧条期,哪些产品和公司居然逆势发展?

金融分析网站Investopedia将以上公司列为07-09大萧条的"赢家"

Investopedia提出:

1.折扣日用品。沃尔玛和Dollar Tree蓬勃发展,因为它们提供了打折的必需品。2. 烹饪。在经济不稳定时期,人们减少了"挥霍"。这意味着外出吃饭的次数更少,而做饭的次数更多。据The National Purchase Diary (NPD)估计,2008年,有77.4%的饭菜是在家吃的。3. 医疗器械和药品的增量告诉我们,健康需求是恒定的。4. 3C、糖果、化妆品和避孕药Candy, Cosmetics, and Contraceptives5. 游戏、拼图、桌游、玩具和其他休闲活动。由于人们不会外出花钱,因此提供性价比的娱乐和学习机会的商家获利。但,注意,昂贵的高科技玩具(例如1,000美元的电视和视频游戏系统)的销售额在2008年呈上升趋势。6. DIY包括清洁服务、维修服务、手工作业等,在2008年的经济衰退期间需求暴增。7. 钓鱼和露营及个人可完成的户外活动,取代了奢华的度假旅行。比如:帐篷、冷藏箱、火炉、睡袋、渔具的销量增加。

除此以外,今年还有个特殊点,由于新冠疫情爆发,在线办公趋势带来个人电脑换机潮。

8.电脑及周边。手机销量大跌,电脑销量却猛增。根据Gartner的结论,远程工作、线上学习以及娱乐需求激增推动个人电脑销量激增。

对照以上tips,我们发现竟然与Kickstarter近期热销的品类惊人的重合。我们编辑部统计了近半年超过100万美金的项目,以下几个品类出现多款爆款级产品

  1. 室内种植(非常值得关注的品类,掌上植物可以凭产品自身在平台获得源源不断销量,看 BiggerCake的销量曲线图非常健康)

  2. 电脑周边(4K可触屏、Moft电脑支架)

  3. 室内健身(健身工具、健身倒计时器)

  4. 室内娱乐(游戏键盘、手掌游戏机、桌游桌、5K VR头显、音乐键盘、VR跑步机)

  5. 露营及户外(对讲机、望远镜、水上滑板、户外大功率充电器、自行车头盔)

  6. DIY(镭射机、草坪修剪AI机器人、切割机、3D打印)

  7. 烹饪(锅、燃气烧烤炉)

室内种植

PICO掌中花园($1,500,698):不需要阳光,也不需要每天浇水,室内也能种植植物。颜值高,体积小,卧室、客厅、阳台,放哪都可以。Pico的多光谱LED植物生长灯,可完全代替太阳光,为室内的植物提供足够的光照。拥有自动浇水系统,一周只需补充一次水分,再也不怕忘浇水。


看看销量曲线,没有呈明显的U形状,而是每日非常平均,说明产品本身需求很大

Terraplanter 室内种植机($6,391,763):一种无土壤、低维护的室内水耕种植机。由100%天然材料陶土制成,可以种植不同的植物。干净,不产生污垢,与都市内部居住空间相匹配。


电脑屏幕

Lumonitor 4K触摸屏便携式显示器(HK$ 7,857,798):超高清4K清晰度,超大屏,但轻薄易携带,移动办公和休闲娱乐的必备神器。


同样,拥有很好看的销量曲线

室内健身

Timebirds 健身计时器($1,058,292):挂壁式随身健身计时器, 为了满足人们多样的训练需求,Timebirds配备了五种多功能锻炼模式,随时随地开始健身,令健身更有规律。

Whipr三合一健身器材($3,511,060):一个小箱子内包含的简单器械可以模拟站立式划水、滑雪和划艇这三项运动,走到哪带到哪,使运动不再局限于时间和地点。这个项目我们之前在百万众筹详情页板块就重点分析过,有兴趣的朋友可以回去看看。点击这里(加文章超链接)。

露营及户外

Waydoo FlyerONE 水上滑板($2,357,029):水上运动可以说是国外户外娱乐领域发展最快的趋势之一。不依赖风浪,就算在平静的河流和湖泊上,也能让你体验"飞过水面"的感觉。

MILO 对讲机($1,541,151,离项目结束还有19天):一款迷你的便携式户外活动对讲机。据说不用wifi不用手机信号也能使用。

室内娱乐

TheoryBoard Thy333音乐键盘($1,013,783):音乐制作/作曲工具;声称产品的颜色编码系统可以为用户提供一种简便的方法来可视化和弦与旋律音符之间的关系,让音乐理论变得更简单。在家也能轻松搞音乐。

KAT Walk C-VR跑步机($1,667,295):世界上第一款个人VR全向跑步机(ODT)–新一代机械设备,可实现360度的人体运动,从而在现实中最小的物理空间上在VR中创建无限的运动区域。

DIY

Toadi 草坪修剪机/AI机器人(€1,600,743):不需要外围电缆,能自动避开障碍物的智能修草坪机器人

Wainlux K6 镭射雕刻机(HK$ 9,045,462):通过wifi和手机连接,一旦建立连接,即可在App中选择图案并开始雕刻。

M1 Caliber 口径测量工具($ 1,275,000):这个工具使得测量木材和其它物品的时候更加方便和准确,无需再手动标记。

烹饪

MISEN 荷兰烤箱($4,217,392):改进了传统的荷兰烤箱,主打多用途和耐用性。

Otto's G32 智能模块化燃气烧烤炉(€4,468,051):自称是燃气烧烤的革命性产品;可以与手机联网,借助SmartValve技术,可以通过智能手机控制烧烤炉。

除了以上品类,还可以为人们提供高性价比的产品以替代市面上的昂贵方案,这也是一个经济衰退期不错的产品方向。


文章来源:老宋聊海外众筹



文章来源:https://www.ikjzd.com/home/135350

picitup:https://www.ikjzd.com/w/446

woot:https://www.ikjzd.com/w/604

houzz:https://www.ikjzd.com/w/236

启明星软件:https://www.ikjzd.com/w/1436

外贸圈:https://www.ikjzd.com/w/1083

2020年经济大萧条,这些Kickstarter产品竟然卖爆了

最近,我们迎来了客户最爱集中问的问题——什么产品在国外好卖?为了系统性地回答这个问题,我们先从美国失业率开始讲起。据Axios的一份独家采访报道称,美国官方统计全国失业率9月份为7.9%,但该统计将每周挣几美元的人排除在外,人为地压低了官方失业率。真实失业率达到惊人的26.1%。

和陈建斌合作cp被吐槽后,李一桐搭档陆毅的新剧开播,又被嘲了

原标题:和陈建斌合作cp被吐槽后,李一桐搭档陆毅的新剧开播,又被嘲了

本文由明星粉丝团作者芦笙原创,未经允许不得转载

说到李一桐,大部分人对她的第一印象就是不红,但是资源很好,曾经一年拍了七部女主剧。至今,她的待播剧也积累了不少,而且作品还在一部接着一部的拍,前不久还官宣了《乌云遇皎月》。面对外界说她是资源咖,不管合作什么男演员,出演什么样的作品都不火这件事,李一桐也不止一次的回应过了。有人说她怎么都捧不红,李一桐表示自己体寒。有媒体表示想要找到李一桐背后的推手是谁,李一桐也亲自下场回应说期待他找到的那一天。于正也发微博夸她演技好,有实力,所以片方愿意找她。

可即便如此,观众不买账也还是没办法。李一桐最近也有新剧正在开播,只不过不是近期拍摄的新剧,而是较早拍摄的作品了。她和陆毅一起合作了《只为那一刻与你相见》,两人在剧中出演cp,而且还有一些感情戏,可两个人之间相差了十四岁,这种年龄感还是无法跨越的。所以很多观众看了之后,都觉得这两个人出演cp太尴尬了,让人无法接受。

从剧情来看,男女主角因为一场意外相识,从陌生人开始相处,但却进展神速,第一天就开始住在一起,随后就开始了一系列美好且浪漫的误打误撞。且不说这样的剧情观众看得太多了,现在早已经不感兴趣了,加上两人年龄悬殊,出演这样的戏份,难免会让人出戏。有人说,不知道李一桐以前为什么总要合作比她大很多的男艺人,之前还和陈建斌合作了《爱我就别想太多》。

李一桐和陈建斌两人也整整相差了二十岁的年纪,本以为这会是一对令人意外的cp,结果这部剧开播后,基本上迎来的都是吐槽的声音。不管剧情的编排再怎么合理,这对cp,观众还是没有办法轻易接受,所以这部剧也同样扑了。有人说,李一桐演了这么多剧,合作了这么多男神级别的演员,其中还有当红流量,从邓伦到李现,接下来还有胡一天和金瀚,从实力派到小鲜肉,她的确是真正的男神收割机。

只不过,在李一桐和这些男演员在一起合作的时候,不管对方是谁,好像都没有太强烈的cp感,。所以合作了这么多男神,李一桐从来都只是被说是资源咖,却从来没有人说她是靠着炒作cp而被大家认识的。或许,真的炒了cp,李一桐现在的发展或许还能够有些热度。所以说, 李一桐在娱乐圈中真的是一个挺神奇的存在,即便资源这么好,她也不火,但观众也不讨厌她,甚至还有些好感,不知道这样的女艺人到底是属于什么体质?

从观众的角度来看,李一桐在众多女艺人中并不算是非常出众的,从颜值到演技都是如此,但能够有这么多人对她有好感,也有圈内人夸赞她,说明真的像于正所说,她是真的有实力吧,就是不知道她何时才能迎来事业上的春天。返回搜狐,查看更多

责任编辑:

原文转载:http://yl.shaoqun.com/a/209073.html

bsci 认证:https://www.ikjzd.com/w/2339

笨鸟海淘:https://www.ikjzd.com/w/1550

一淘比价网:https://www.ikjzd.com/w/1698


原标题:和陈建斌合作cp被吐槽后,李一桐搭档陆毅的新剧开播,又被嘲了本文由明星粉丝团作者芦笙原创,未经允许不得转载说到李一桐,大部分人对她的第一印象就是不红,但是资源很好,曾经一年拍了七部女主剧。至今,她的待播剧也积累了不少,而且作品还在一部接着一部的拍,前不久还官宣了《乌云遇皎月》。面对外界说她是资源咖,不管合作什么男演员,出演什么样的作品都不火这件事,李一桐也不止一次的回应过了。有人说她怎么都
深兰科技:深兰科技
vat:vat
韶关龙王潭在哪里?:韶关龙王潭在哪里?
旺季选品注意了!今年万圣节买家高频搜索词变化大!:旺季选品注意了!今年万圣节买家高频搜索词变化大!
宝安沙井---亚马逊运营:宝安沙井---亚马逊运营

针对Java面试来学习JAVA内容,让你事半功倍

    最近我在网上看到不少在校的同学在学java,有不少在校生同学来提问,java该怎么学。

    对于那些已经工作的同学,哪怕才工作不久,毕竟也能从项目实践里总结和探索java的学习途径和相关方法。但在校生同学由于没机会接触实际项目,在学习内容、进阶途径和学成标准这些方面都是两眼一抹黑,而大学里的内容可能偏重于理论,讲述的技术往往也和软件公司里常用的技术不匹配。

    这就导致了很多上心的在校生,虽然很努力,但到毕业时,才发现自己起早贪黑学成的技能并不能帮他们找到工作。在本文里,就将结合我面试实习生和毕业生的标准,专门给在校生这个群体一些学习Java方面的建议。

如果大家在学习Java过程中遇到什么问题,或者缺乏相关的Java学习资料,可查看右侧公告栏获取,有问题随问随答,还有我这段时间整理的一些Java学习手册,面试题,开发工具,PDF文档书籍教程,需要的话都可以免费分享给大家。

1 明确目标,先说下公司面试应届生的标准

    我最近可能都在大公司,到毕业季,会到一些学校去校招,校招的标准描述起来很简单:Java方面能干活,或者能经短期帮带后能干活,具体标准如下。

    1 Web框架方面,需要以全栈的形式,了解SSM,或Spring Boot或Spring Cloud从前端到后端的基本语法,至少能在项目经理短期帮助下,能照着别人的例子写代码。应届生候选人只要能讲清楚相关框架的语法点和流程即可,最多再附带说明下mybatis等组件的用法,至于redis,dubbo,根本没要求。

    2 数据库方面,能会基本的增删改查即可,外带一些基本概念,比如事务怎么处理,JDBC里批处理怎么处理。

    3 Java语法(也就是核心方面),其实如果能讲清楚SSM等Web框架技能,这块只要刷题就能过,比如就问些ArrayList和LinkedList的差别,以及多线程等的概念。

    4 人看上去听话,想法少,学习能力强,责任心强,不是刺头,这块其实大多数人都可以达标。

    以上不要求有商业项目经验,当然如果有,绝对是加分项,而且这还是大公司的面试应届生的标准。至于一些小公司,或者是一些外包公司,有时候能招到人就阿弥陀佛了(至于有些能力比较强的一本的应届生愿不愿意去还难说)。有些在招收应届生的时候,不少小公司甚至在"项目经验"方面没要求,哪怕没学习项目经验也不要紧,只会问些网上比较大路的面试题,能说上来即可。

2 面试中大多数应届生的实际表现

    从面试官角度来看,招收应届生的标准其实是很低的,对应的,在招初级开发时,多少都需要有商业项目经验。从这个角度来看,应届生最好在校期间就找到工作,毕业后两三个月找不到工作问题还不怎么大,但如果半年后再找不到工作,那么到时候被面试的标准就高于"应届生"的标准了。

    这里我无意贬低应届生的水平,毕竟我们都是从这个阶段过来的,但从面试情况来看,至少有将近一半的应届生达不到标准,下面列些具体的表现。

    1 没有框架开发的经验,这里最低要求是能自行搭建个SSM项目,但不少同学根本没有。

    2 数据库方面,就知道理论上的增删改查,甚至不会在MySQL, Oracle和SQL Server平台上运行过SQL语句。

    3 Java核心方面,掌握了一大堆项目里一定不会用的,比如Swing之类的界面编程技术,但该掌握的多线程集合等,一些常用的概念也不清楚。

    论动手能力,有些同学甚至没有在Eclipse等IDE上运行通Java代码,或者出了基本的语法错误不知道如何自行解决,至于没有debug调试经验的,就更加见怪不怪了,而在代码里需要加必要的try...catch异常处理语句,这就更加凤毛麟角了。

    在一些一本大学里,理论和实际操作能力较差的同学虽然不多,但也有,就更别提其它大学和大专了。我也和一些大学老师打过交道,也看过一些大学里用的Java和数据库等编程方面的教材,再结合诸多应届生在面试时的表现,我的感受是,或许大学阶段更会培养学生的理论素养,但大学生朋友在读大学阶段,一定要提升实际的编程能力,包含但不限于(SSM)框架的编程能力,数据库实际操作能力和Java核心部分代码的开发和调试能力 。 

3 哪些大学里学到的知识点面试大概率不问(根本不用太费精力看的技术有哪些)

     前几天我看到篇大学生朋友写的文章,匹马行天下之思维决定高度篇——大学再努力,培训机构做兄弟,或许很多大学生朋友也知道上进,平时也在不断看各种资料,但可能苦于方法不当,可能有些大学老师也没真在公司里干过,也没法给出合适的学习建议,所以导致最终毕业找工作时,能力没达到基本的期望要求。

    也就是说,大学教育和公司面试需求之间存在差距,这就给一些培训机构带来了商机。但培训机构收的钱也不便宜,而培训班也不是一定能保证学生能找到工作,关键要靠自己。从这里开始,就将给出有实际操作性的学习建议。

    我最近接触到不少大学生朋友,发现他们努力正在学的知识,面试时未必会问,也就是说,这些点白学了。之前已经提到了面试的标准,这里就将结合具体的知识点,列出面试时需要掌握的最低技能标准,除此之外,大概率不会问的。

    1  Java核心方面,集合,多线程,异常处理,IO,JDBC,面向对象技能,大概率会问到,其它的没提到的,比如图形化界面,NIO,Socket网络编程,甚至Applet之类的,不会问到。

    2 数据库方面,会写增删改查的SQL语句,知道存储过程之类的概念,会通过索引优化查询条件,会建表,会些诸如子查询,group by,having,表关联查询等基本SQL技能,这里请注意,至少得用过一种商业化数据库。

    3 框架方面,需要有Spring+Spring MVC+mybatis框架的实际操作能力(不是商业项目开发能力),至于有Spring Boot或Spring Cloud,那更好了。

    4 综合技能方面,能知道基本的数据结构知识(线性表外带排序外带一些树的技能),基本的操作系统知识(一般仅限于线程进程概念),基本网络通讯知识(一般仅限于网络通讯模型和tcp udp协议),但这仅仅是"需要知道"而已。

     大家其实也可以通过看各种职位描述和招聘需求,看下哪些技能实际上是不会问的,对于这些知识,就不用学,从而把精力用到学实际Java相关技能上。

     这里需要说明,在大学阶段学的很多知识,不能说没用。比如网络通讯里的tcp底层通讯细节,这些技能或者要等到工作5年后升级到高级开发或架构师的时候才会用到,而且以高级开发视角观察需要掌握的通讯协议细节知识,绝对要比大学阶段要复杂。

    换句话说,很多技能,在大学阶段也就"需要了解有这事",以在大学阶段的经历,再多用时间学,估计也无法达到"实际项目的需求",而且等到有实际项目经验时,再学这类技能也就是一两周的事情。两厢一对比,结论就很明确了:在校阶段应该更多积累实际开发能力,因为更得靠这个找工作。 

4 用一个月的时间了解Java核心部分的内容

    通过上文,大家大致可以了解到毕业时找工作的目标,如果再不了解,可以实际看下招聘要求,甚至直接多去参加招聘会和面试,总之优先考察实际的开发能力,具体在Java核心部分,该如何高效学习呢?

    1 在电脑上装jdk,eclipse,别用editplus之类的工具,最好再用eclipse的自动编译功能。这方面,其实是锻炼自己的动手搭建环境的能力,工作后,开发是一方面,搭建环境的能力同样重要。

    2 刚开始,一定得去找两三本Java入门书,先通过运行现有代码,理解代码的含义。别光看书不运行,开始阶段,也多运行别人的代码,别自己敲代码。这里建议直接找书,因为相比一些视频教材,毕竟书上的知识很系统,而且能正式出版的书一般没代码问题,能直接运行。不建议自己敲代码,是因为自己敲代码时,多少会遇到问题,遇到问题后延误学习进度是小,因为一直得不到解决从而影响学习信心,甚至终止学习了,事情就大了。

    3 如果找到两三本Java入门书,一般其中涵盖的知识系统大多很相似,大家可以先运行一遍所有代码,这样就能大致掌握代码结构和基本知识点,而且由于书上代码一般问题不大,而且质量也不会低,至少不会有太大的阻碍性问题。

    4 当运行好以后,着重观察集合,面向对象,多线程,IO处理,JDBC,异常处理相关章节,这个阶段,是以掌握API用法为主,在这基本上再看下诸如接口,抽象类,异常处理流程,垃圾回收之类的高级知识点。 

    在上述基础上,如果可以通过资料的帮助,用Java实现堆栈,链表,队列,散列表,树等的数据结构,同时操练各种排序算法,这对找工作也有些帮助。

5 用半个月的时间,以MySQL为例,了解数据库的大致操作

    在数据库方面,最好也去找本书,同时在MYSQL上实践。为什么选MYSQL?因为这比较轻,相比Oracle而言,好安装,当然如果有条件装SQL Server之类的,那就更好了。 

    1 在MySQL数据库上,实践各种增删改查的SQL语句,实践建表,建索引能技巧,同时实践一下诸如子查询,with as等等复杂的SQL语句。

    2  用JDBC连同MYSQL,在Java代码里做各种增删改查的操作。

    3  在此基础上,了解诸如索引,范式和锁等概念,这时候虽然认识也会很肤浅,但至少不会一头雾水了。

    这样,在数据库方面,好歹有实际操作经验了,这为之后的项目实践,能打下很好的基础。

6 用一个月的时间,了解基于Spring的web框架

    面试时更看重的是框架经验,这块学习的建议如下。

    1 先通过运行代码,了解Spring里IOC, AOP,这时应该注意各种配置。

    2 熟悉Spring的基本概念后,可以尝试跑一个SSM的小例子,这个例子可以非常简答,就一个页面也行,但要包含Spring MVC和Mybatis诸多要素,这样大家好歹能知道框架的构成,在这个基础上,可以继续扩展,加些必要的业务,从而进一步了解这个框架。

    在这个阶段,还是最好看书上的例子,因为书上的例子一定能通,而且还会带部署和运行的步骤,还是不建议自己敲代码,因为SSM框架相对复杂,在这个阶段如果自己敲,很有可能会因为问题太多而放弃。

    3 在自己机器上跑通SSM框架的案例后,可以网上找个带业务的系统,比如图书管理系统等,从中看些前端和后端交互数据的流程,同时,结合业务看Mybatis里的ORM过程,以及Spring里的常用注解。     

7 在学习过程中,可以避免的误区

    Java方面,本人按照上述步骤辅导过不少在校的同学,只要肯上心练习,效果不会太差,不过很多同学在实践过程中会走弯路,这里列些普遍存在的问题,请大家在操练的过程中尽量避免。

    1 别钻牛角尖,先面再点。比如有同学对一个知识点不理解,或者一段代码运行有问题,就会在这个点上耗费很多时间,不解决就不继续。其实在这个过程中,首先需要全方位掌握SSM框架、Java技术和数据库,个别点如果有问题,可以跳过,或者一个案例运行不通可以运行其它类似的,总之别在一个点上花费太多的时间。

    2 再啰嗦一下,最好先照着书上代码运行,开始阶段的学习方法是"复制粘贴运行理解",在自己已经有一定的基础后,再尝试自己写代码。

    3 在操练SSM项目时,有些同学会照着视频上提到步骤做,如果有些视频步骤不对,这样就会有问题,所以还是建议照着书做。

    4 工具要选对,刚开始就eclipse,或者Idea,别用editplus或命令行。

    上述是方法上的误区,其实最大的问题出在态度上,上述学习过程持续时间不会短,快则两三个月,慢则半年,如果中途因为效果不明显而放弃,那就很可惜了。 

8 有学习项目经验后,争取找些商业项目的实践机会

    按照上述步骤,让自己拥有最基本的SSM以及其它Java和数据库相关技能后,要做的绝不是继续积累学习项目经验,而是尽可能去找实习的机会,以积累商业项目的经验。在找实习经验方面,大家可以参照如下的建议。

    1 在我之前的博文里也提到,大三时,打听计算机学院里哪些老师和外面公司有合作,一般硕导都有这样的项目,然后直接去找老师,刚开始不要钱,只求经验,或许对各位在校生同学而言,这种方式是比较可行的,本人第一个商业项目经验也是由此得到的。

    2 一般学校里都会安排实习,实习的过程中,一定要重视,这个是实打实的商业项目经验。

    3 寒暑假,找软件公司,这可能会比较艰辛,因为在校阶段自己非常难找相关实习机会,但要去找。

    4 这个大家根据自己的实际情况自己斟酌:如果报培训班,多少能积累些项目经验,但这仅仅是学习项目经验,不过在培训班里,可以找相关老师推荐实习的机会。

    5 如果实在找不到实习的机会,那么尽可能通过各种渠道,去找商业项目经验的案例,我知道有些网站有,但不做广告。虽然靠这种方式积累的商业项目经验质量就打折扣了,但好歹聊胜于无,而且毕竟很多毕业生,连学习项目经验都没。 

    不少在校的同学发现,哪怕实际只干了三个月的商业项目经验,自己的技能也会很大程度提升,而且实际的商业项目经验,会让大家掌握书本上根本不会多提但项目里一定会用的技能,比如JVM内存调优或多线程并发。从这意义上来讲,只要有条件,大学生朋友应该挤破头去找商业项目的经验,而不是悠哉游哉地坐在机房里敲代码。只要你有商业项目的经验,哪怕就三个月,找工作时你就有代差优势。

9 毕业生准备简历的要点

    按照上述步骤,大家在毕业时,多少会有些商业项目经验,再不济也能有学习项目经验,请记住,在招聘毕业生时,第一看项目经验,第二看项目里包含的技能,第三再问算法和理论问题,至于逻辑题和情商题,只供参考。

     对此,毕业生在简历中,一定得突出做过的项目经验,优先挖掘商业项目经验,实在没有学习项目也行。如果没任何项目经验,那么找工作时会吃力很多。本文的重点是讲学习方法,准备简历的技能只是稍微提到。这块可以参考的之前写的博文,你的简历能帮你争取到面试机会吗。如果有时间的话,或许我会再专门针对毕业生朋友,写篇文章讲在java方面,如何准备简历和面试,以及如何找工作。 

10 总结:最多坚持半年,技能就会大变样

    我记得两年前,我的Python能力仅限于写hello world,我运行代码看文档,辛苦坚持了半年,自认为就达到了出版书的地步,再过了半年,果真就从出版社接到了一本以股票案例讲述Python技术的选题,并自认为写的内容不会误人子弟。

    本文虽然长,但其中也是尽我所能,给出大学生朋友若干有实际操作性的学习建议,其实对于其它初学者,本文给出的建议同样适用。希望本文能帮到大家,最后感谢大家能读完此文。

 









原文转载:http://www.shaoqun.com/a/494380.html

谷歌趋势:https://www.ikjzd.com/w/397

商标抢注:https://www.ikjzd.com/w/1053

weebly:https://www.ikjzd.com/w/2486


最近我在网上看到不少在校的同学在学java,有不少在校生同学来提问,java该怎么学。对于那些已经工作的同学,哪怕才工作不久,毕竟也能从项目实践里总结和探索java的学习途径和相关方法。但在校生同学由于没机会接触实际项目,在学习内容、进阶途径和学成标准这些方面都是两眼一抹黑,而大学里的内容可能偏重于理论,讲述的技术往往也和软件公司里常用的技术不匹配。这就导致了很多上心的在校生,虽然很努力,但到毕业
1号团:1号团
telegram:telegram
重点城市空气质量日报3月30日 :重点城市空气质量日报3月30日
快速参透竞品!10大监测工具一键"透视"对手广告投放全貌:快速参透竞品!10大监测工具一键"透视"对手广告投放全貌
不丹专属私人飞机团 幸福,只要4.5小时:不丹专属私人飞机团 幸福,只要4.5小时

一个亚马逊屌丝卖家的自述!

一个亚马逊屌丝卖家的自述!

亚马逊卖家想要做好做大,按照一般的商业逻辑来说,就是开源和节流了。但是在现如今的模式下,想要开源,就得去是打新品做爆款拓类目,做这些已经是非常之困难了,动则就需要成千上万的推广成本,钱砸进去了回报率不高,还要承担很大的风险,亚马逊卖家对于投入这一块已经愈发的谨慎了。所以,在现如今佛系卖家,屌丝卖家越来越多的情况下,大都开始实行猥琐发育政策,尽可能从节流方向去抠利润逐渐成为了主流。

毕竟赚钱越来越无力,也越来越不敢压钱,但是省钱还是有方法的,维持目前销售额的情况下,实现利润的增长也算是增长啊,不一定增长非得是销售额的增长,也不是每一个卖家都签了对赌协议的。

那么节流应该怎么节呢?所以下面我就和大家来聊一聊,作为一名亚马逊屌丝卖家,我们应该如何把省钱做到极致

01

省钱小妙招1:

产品尺寸和重量的秘密

亚马逊老鸟都知道,FBA仓储费和配送费都是由产品的重量和尺寸决定的,亚马逊会按照不同的产品尺寸和重量标准来给你的产品做归类,类别不一样相对应的费用也就不一样。一般来说呢,每个FBA产品的长宽高和重量,亚马逊只会测量一次,之后就会根据这个数据来收取FBA费用,正常情况下亚马逊很少会主动进行重新测量,毕竟一个产品反复重新测量对于亚马逊来说实现是太麻烦了,会降低他FBA仓库的运作效率。

而且根据我们过往经验来看,亚马逊为了提高测量结果的精准性,不会完全按照仓库的策略结果为准,还会去参考卖家在后台填写的尺寸和重量做一个综合决定,因为亚马逊也知道自己的测量总是有问题,如果不参考卖家在后台填写的尺寸和重量,到时候被开case要求重新测量也挺麻烦的,所以一般最终的数据是由真实测量结果和后台填写的结果综合考虑得出来的。

所以说,这里就有一个空子可以钻了。下面讲一下具体怎么操作,我们一般会在第一次FBA入库的时候,在后台填写产品的dimension和重量的时候故意填写小一些,但是不要太离谱,误差控制在2-3成即可,你会发现基本上亚马逊会按照你这个标注来,而不是他真实的测量结果。如果正好因为写小那么一点点,被划分到了更便宜的那个收费标准,你就赚大了,大家可以用起来,这算是一个FBA省钱的小技巧。

另外还有一点需要注意的是,亚马逊总是容易搞错你的FBA尺寸和重量,这类错误真的是常有的事情。每次FBA入库的时候,千万记得去看一下最后测量出来的尺寸和重量,如果你之前没有看,记得把之前的FBA产品都检查一遍,如果有错误的话,先开case要求亚马逊对产品进行重新测量,这个过程从几天到俩礼拜不等, 尺寸重量如果改了后还是不对, 可以继续开case直到你满意为止。

完成重测以后,下一步就是调出所有这个SKU过去所有的order ID,这个可以从后台的transaction和statement里面下载, 查找排序下就可以了。把这些order ID准备好以后, 开case说明因为之前尺寸重量错误了, FBA费用多给了, 要求发起reimbursement。目前一个case能够申请的 reimbursement数量是有限的,所以量大的还是需要一个一个case开。基本上到这里就结束了,之后要做的就是跟进case, case 关掉之后别忘了去查账, 看看是否有退款给你, 有时候亚马逊也会疏忽的。我们一般几个月查一次,每次弄可以弄回几千美金回来。

02

省钱小妙招2:

利润核算里面的秘密

亚马逊FBA做久了,很容易就陷入到一个误区,就是自以为赚了很多钱,结果一算费用就吓住了,其实没赚钱甚至亏损巨大,这也是很多新手运营容易犯的错误。其实归根到底是因为在财务核算上面出现了大问题,特别是做精品爆款的亚马逊卖家在运营推广过程中,会有大量的隐藏花费,很多时候容易被忽略,这样就造成了其实亏损还浑然不觉的情况,而且稍不留神不加控制,导致越亏损越多的情况发生。简单举个例子,比如下面这些费用就很容易被忽略退货处理费、仓储费、FBA赔偿、秒杀费用、刷单测评费用,Coupon优惠券费用、站外费用等等

所以说作为一个合格的亚马逊运营,我们需要及时、快速、完整、准确的获取利润数据,并进行数据分析,这样才能长久立于不败之地。对此我们要么就把所有可能产生花费的项目列出来,通过Excel表格来完成统计工作,要么就图方便快捷,使用带有财务功能的工具帮助我们实现财务核算,比如如下图所示,我们正在使用的工具积加ERP里面的财务模块就非常完整的展现出来了我们FBA产品的一个完整财务数据,方便让我们运营快速掌握了产品的所有花销情况以及真实毛利润大小。

03

省钱小妙招3: 

严防亚马逊乱收费

之前有一篇帖子在国外论坛上面特别有名,我们也曾经翻译过,大家没看过的可以去看看>>终于,亚马逊开始吃人了!里面这位美国亚马逊卖家感觉自己做到后面就是给亚马逊打工了,啥钱都没赚到,我相信这也是很多中国卖家的真实写照,亚马逊FBA的各项费用实在是太高了,稍不留神就容易亏损。

所以说,我们作为亚马逊FBA卖家,得要去关注FBA全流程里面的所有的细节,能检查一遍就检查一遍,发现不对的马上开case找亚马逊更正,并且要求亚马逊赔偿损失,你会发现能够找回来不少钱,这些都是我们的血汗钱。下面我简单列一下需要注意的具体的方面,各位FBA卖家可以自己去做一个检查。

亚马逊FBA索赔3大方面14种情况

运输和管理库存方面——

超过30天亚马逊仓库已丢失/损坏的库存;

超过30天亚马逊委托的运输公司在运输途中产品被损坏,而没有得到相应补偿的;

没有得到亚马逊声称报销的退货费用的补偿;

没有经过商家允许而亚马逊销毁的产品,没有得到相应补偿;

因为尺寸与重量而多扣的费用;

用户退换货方面——

亚马逊接受并退款给客户超过30天外要求的退货,11/12月为90天;

客户换货时间超过30天,亚马逊没有给予35%的重新入仓费;

客户换货,但亚马逊却退款给客人并发货给客人;

客户收到货时订单收获多于购买的货物;

商品价值方面——

亚马逊补偿金额高于购买金额;

赔偿金额价值不符合实际产品价值;

亚马逊补偿金额少于对应补偿;

亚马逊客户收到退款后,45天内没有退回商品;

客户退款的金额高于购买金额;

04

省钱小妙招4: 

产品更新的另类思路

我们在做产品更新迭代的时候,或者是在做选品工作的时候,总容易进入一个惯性的思维误区,总想着去开私模或者做一些功能性的改变来实现对产品的微创新改造,让产品看起来和竞品不同,但是殊不知这种开私模和加功能模式前期投入很大,后期能不能卖的动也未尝可知,并不符合我等屌丝卖家的行为作风,所以我建议大家其实可以换一个思路来思考这个问题,想要自己的产品和竞品不一样,也不一定非要去开私模和加功能。

大家都知道亚马逊上面最好用的推广手段其实就是低价,只要你价格一降低,销量和排名就蹭蹭往上跑,低价不但客户喜欢,也是符合亚马逊的飞轮理论的。所以我们想要和竞品不同,干嘛不在产品包装,尺寸以及重量上面下功夫呢? 如果能够在不影响产品正常使用的情况下实现缩小尺寸减少重量的目的,就能够降低FBA的成本从而降低整体的 产品成本,那么我们在销售的时候就会有更大的价格优势。

而且你会发现同样的产品你更有价格优势,所取得的营销推广效果比你去大费周章的做微创新会更好,而且失败的风险会更低。要知道亚马逊这个平台其实不喜欢标新立异的产品,更喜欢物美价廉的标品普货。

05

省钱小妙招5: 

旺季促销的时候要注意折扣的组合

特别是在Q4旺季的时候,我们经常会去做各种方面的促销,比如站内的Coupon,站内秒杀,Promotion促销,黑五专属秒杀,站内affiliate促销,还有站外的放量和促销等等。有时候一个促销还不够,经常会采取多种组合促销的模式,把促销效果给最大化。

当我们在设计促销组合的时候有一个小细节大家需要注意,一般两种不同形式的促销组合在一起会出现两种截然不同的形态:1 折上折模式;2 折扣叠加模式。

这两种模式的最终折扣价格是不一样的。举个例子大家就明白了:比如一个产品有两个促销,第一个促销折扣是30% off, 第二个促销折扣是20% off,。如果是按照折扣叠加的模式,最终产品的促销形态就是50% off;但是,如果是按照折上折的模式来看,那就是在30% off 的基础上再打上20% off的折扣,最终的折扣形态和之前折扣叠加模式是不一样的,所以最后的价格也是有差异的。

基于上述情况,我在这里建议大家在操作组合促销的时候,一定要提前测试一下看看到底属于折上折模式还是折扣叠加模式,这两种情况都是有可能的,这样更有利于我们做成本核算以及效果评估,不然到时候本来以为是赚了结果是亏了就不好了。

Ending

写在最后

今天关于省钱的一些小方法就和大家聊到这里了,今年旺季不太旺已经是大势所趋了,今年有疫情加持透支了一波销量,明年估计会很难过,建议大家尽量猥琐一波,尽可能的省钱把节流工作做到极致吧!


来源:跨境电商头条

文章来源:https://www.ikjzd.com/home/135268

etsy:https://www.ikjzd.com/w/169.html

vat:https://www.ikjzd.com/w/109

中国邮政邮乐网:https://www.ikjzd.com/w/1776

usps国际快递查询:https://www.ikjzd.com/w/513

1号店网:https://www.ikjzd.com/w/2263

一个亚马逊屌丝卖家的自述!

亚马逊卖家想要做好做大,按照一般的商业逻辑来说,就是开源和节流了。但是在现如今的模式下,想要开源,就得去是打新品做爆款拓类目,做这些已经是非常之困难了,动则就需要成千上万的推广成本,钱砸进去了回报率不高,还要承担很大的风险,亚马逊卖家对于投入这一块已经愈发的谨慎了。所以,在现如今佛系卖家,屌丝卖家越来越多的情况下,大都开始实行猥琐发育政策,尽可能从节流方向去抠利润逐渐成为了主流。