2020上半年问题总结

文章目录[隐藏]

前言

工作的时候,因为是内网开发,所以遇到难题Milo都记在纸上。原本想一月一发,事实上却因为各种缘由拖了大半年,一下子整理起来问题还真有点多。以下内容可以说是问题集锦,或者大杂烩了。

问题总结

  • Front-End
    • 强制刷新
      答:使用this.$forceUpdate();
    • 立即刷新绑定的数据
      答:使用this.$set(对象, 属性, 值);
    • Echarts3中,legend如何底部显示?
      答:可以使用x和y属性定位。例如:x: ‘center’, y: ‘bottom’
    • Echarts3中,坐标文字如何对齐刻度线?
      答:在xAxis或者yAxis中设置axisTick的属性alignWithLabel为true。
    • Echarts3中,如何调整图与外层的边距?
      答:调整grid中的left,top,right,bottom属性即可,无需调整div的边距。
    • Echarts3中,如何设置值为0时,不显示tooltip?
      答:设置formatter,值为0时,调整回调函数中的params参数。
    • Echarts3的柱状图中,如果某个y值为0,如何设置不显示它的x柱?
      答:略。
    • \$nextTick()的作用?
      答:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。因为Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。\$nextTick()是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 nextTick,则可以在回调中获取更新后的 DOM。
    • 如何跨页面触发刷新?
      答:使用this.\$root.eventHub.\$emit、this.\$root.eventHub.\$on();、this.\$root.eventHub.\$off();。其中,this.\$root.eventHub.\$off()写在beforeDestroy(){}中。
    • vue中引用图片的方式?
      答:除了使用@/assets/路径以外,还可以先import图片,然后再引用。
    • 正则表达式:/[,|.| ]|OR/
      答:[]中只匹配其中一个。|右边匹配OR。整体解释是:匹配逗号,句号,空格,或者OR。
    • 埋点的实现?
      答:略。
  • Back-End
    • 使用static变量,还是使用@Value,还是使用@PostConstruct?
      答:代码中尽量不要不出现魔法数值。取而代之使用取名的静态变量,或者配置。
    • Variable used in lambda expression should be final or effectively final异常。
      答:使用数组或者原子类型AtomicInteger。我通常是使用数组,因为有一次使用AtomicInteger时,出现了无法定位的数值不改变问题。
    • yml配置文件中,list或者set的写法?
      答:

      pets:
        - 1
        - 2
        - 3 
      // 或者
      pets: [1,2,3]
    • 运行docker的几种方式?
      docker start container
      docker exec container
      docker run image
    • 如何删除docker镜像?
      答:先使用rm删除容器,再使用rmi删除镜像。
    • 使用poi-tl时,如何在同一个占位符上插入多张图片?
      答:首先,一定要是v1.7.0以上,如果要使用#this占位符,一定要v1.7.2以上。其次,修改模板文件,使用区块标签。
    • Json中,如何添加多个相同的key,但value值不同?
      答:多加一层JsonObject inner = new JsonObject();
    • Java8如何获取时间戳?
      答:LocalTime.now();
    • Java8中,Date类型如何转换成Temporal类型?
      答:Date.toInstant。
    • 国密算法?
      答:略。有现成的jar包。bcprov-jdk15on的v1.64和hutool-all的5.2.5。
    • 拷贝数组?
      答:使用System.arrayCopy(src, srcStart, target, targetStart, length);
    • IDEA重新编译/热部署?
      答:CTRL + F9或者JRebel插件。
    • 如何进行自定义全局异常处理?
      答:首先创建@ControllerAdvice,其次创建@ExceptionHandler。
    • axis 2中关于RPC调用?
      答:略。
    • 如何制作自定义starter?
      答:略。
    • @Cacheable和@CachePut的用法
      答:@CachePut可以确保方法被执行,同时方法的返回值也被记录到缓存中。@Cacheable当重复使用相同参数调用方法的时候,方法本身不会被调用执行,即方法本身被略过了,取而代之的是方法的结果直接从缓存中找到并返回了。@CachePut和@Cacheable这两个标签可以结合使用,当需要根据请求改变值的时候,利用@CachePut将值改变并写入到缓存中,而@Cacheable标签除了第一次之外,一直是取的缓存的值。注意:必须是同一个缓存实例。且,key值必须是相同的。
    • redisTemplate和stringRedisTemplate操作?
      答:redisTemplate是对象操作。stringRedisTemplate是字符串操作。
    • rabbitmq执行流程?
      答:rabbitmq——发送——交换器——交换器对应的queue。
    • actuator是什么?
      答:起到监控作用。另外,启动配置中,设置-verbose可以显示jvm启动详情。
    • Elasticsearch限制超过10000数据量的查询,如何解决?
      答:方法一:通过设置index 的设置参数max_result_window的值。方法二:使用scroll(游标)的方式进行查询。其中,方式二似乎无法进行翻页。
    • @Value(“${}”)和@Value(“#{}”)的区别?
      答:前者直接翻译成字符串。如果配置值为空,写法是@Value(“${配置项:默认配置}”)。后者是SpEL表达式,会解析内容。如果配置值为空,写法是@Value(“#{表达式?:默认值}”)。如果是在设置list的默认值,将list内容以逗号拼接即可。
    • 如何导出mysql数据?
      答:mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名;
    • 如何导入sql文件?
      答:进入mysql命令行,source A.sql;
    • SQL如何截取子字符串?
      答:substring(“AAA”, 0, 4);表示:从第0位开始,截取4位。
    • token的生成机制?
      答:略。
    • awk的用法?
      答:略。

经验总结

  1. 修改template和修改借口一样,一定要检查所有使用该组件的地方。
  2. 算法有分布式和非分布式之分,在分布式环境下,要考虑选择的算法是否可用。
  3. 编程的时候一定要有:分布式和大数据的思想,一定要考虑大数据量的情况。例如,前端要考虑显示X亿Y千万,后端要考虑使用多线程处理。
  4. 编程步骤一定是:先写算法思想的注释,再编码。
  5. 实现需求的步骤一定是:先重构现有的代码,再考虑能否最简单的实现方式,考虑后再进行实现。因为一味地添加代码,增加字段,最终只会使系统越来越臃肿,而变得无法维护。
  6. 重构一定是:一个功能一段代码,提高代码复用。变量有时候是必不可少的,可以用于定位异常。
  7. 代码中一定要有log输出,因为上了远程环境,很多时候通过log可以直接定位bug点。
  8. 删除操作尽量不要使用xxxTemplate.delete(),要使用逻辑删除。例如,把某个字段置为1。
  9. 删除数据时,要考虑效率问题。例如,删除7天前的数据,如果7天前的数据有好几十亿,删除操作会影响到业务流程的执行效率。应该考虑异步多线程操作会不会影响到当前的业务需求。
  10. 如果列表中多个组件调用同一个弹出框,不能在for遍历里写弹出框,会导致弹出框组件数据异常,它会总是列表项最后一项。应该在for循环范围外,独立创建一个template。
  11. 前端可以使用+ new Date(),其含义为转换数值。
  12. 后端查询涉及统计/聚集时,可以采用定时写表,随时查询的形式进行。
  13. 定时器的调用可以提取到一个单独的微服务中,首先避免直接调用正式环境的借口。其次,发布时可以独立发布,同样不影响系统运行。
  14. vue中使用watch时,如果设置了immediate为true。它在绑定时会立即执行,监控对象的值为空时也会执行handler。监控时应该判断具体的属性。
  15. 后端修改CRUD代码时,应该时刻谨记数据的回填,保证整个CRUD流程数据回填的完整性。
  16. 为了防止后端乱码问题,配置项和配置值尽量使用英文数字下划线。涉及中文时,提交代码和发布到线上环境,应该将中文转化成accii码。
  17. 系统启动时,一般会将部分数据写入缓存中。应该考虑是否可以提供刷新缓存的接口,和刷新定时器一样,应该单独一个微服务。避免某些数据更新后,需要重启正式环境。
 
本文内容转自冰部落,仅供学习交流,版权归原作者所有,如涉及侵权,请联系删除。

声明:
本平台/个人所提供的关于股票的信息、分析和讨论,仅供投资者进行研究和参考之用。
我们不对任何股票进行明确的买入或卖出推荐。
投资者在做出投资决策时,应自行进行充分的研究和分析,并谨慎评估自己的风险承受能力和投资目标。
投资有风险,入市需谨慎。请投资者根据自身的判断和风险承受能力,自主决策,理性投资。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注