电商go语言笔试题答案

正题就是:电商go语言职位笔试题答案。为什么标题是这个,我也不知道呀!

【拼装n个m大小的字符串数组的字符串组合】(详细业务见下方代码注释)
有递归的方式(递归太挑使用场合了,用的不好我怕挨打,所以不写就不会挨打)
嵌套循环的方式(面试官说要ijk变量临时加加减减,判断来来回回,我也许要半天才能实现但是我觉得是浪费时间)
这里介绍我的拆分方法(就是将大问题拆解为简单的局部问题,粗暴相加)。

该实现自我标榜的优点是:
1,可以改成多线程,或者分布式节点执行,以此支持大数据量的拆分并发计算,中间值的存储可以更加丰富,不会出现栈溢出,如字符串加到一定体量,可以改为存到数据库,数组下标里存记录id,最终输出时根据id串联输出,规避内存占用大的缺点。
2,除了扩展性,最最突出的莫过于实现简单易懂。只要记住分而治之(当然下方可能没有实现这个逻辑但有这个核心),n*m都转换成两两相加,这个实现起来毫不费力,怎么写都不会错。分而治之的思想也是拆解常见问题的方式。

那,总结起来就是:简单可爱,不信就往下看:

import java.util.ArrayList;
import java.util.List;

/**
 * 组装数组 
* 拼装n个m大小的数组的字符串组合
* 即每个数组中选取一个元素,组成字符串的个数,比如以下main中的组合是3*3*3*4=108
* 如 a11,a21,a31,an1 ... a13,a22,a31,anm ... a13,a23,a33,anm
*/ public class ArrayMaker { public static void main(String[] args) { //构造数据源 String[] ary1 = new String[]{"a11","a12","a13"}; String[] ary2 = new String[]{"a21","a22","a23"}; String[] ary3 = new String[]{"a31","a32","a33"}; String[] aryn = new String[]{"an1","an2","an3","anm"}; List list = new ArrayList(); list.add(ary1); list.add(ary2); list.add(ary3); list.add(aryn); //按照规则,开始合并生成字符串数组 //只有一个线程,就简单的二个值累加一下吧, //真的拆分要先切分数据源,体现出拆分,再到结果的分布式合并。 //直接强硬地取初始值 String[] ary = list.get(0); for(int idx=1;idx

下方吐槽,君可旁观

近日,面试了几下,那些个题目,搞得我摸不准,不是因为难,说是简单可我也没答对呀,真是尴尬,为了缓解淡淡的忧伤,所以我就写文章吐槽。。。。。。。

比如,哪些走索引(然后列出了一些where 条件判断),无非就是考察sql怎么写高效,能看懂执行计划,知道高效的写法其实也就差不多了,至于那些千奇百怪的写法小心要请挖掘机来填。

比如,String的各种初始化,反反复复赋值来来回回变着花样初始化,问你一共产生了多少个对象。估计大多数人都只有模糊的规则,比如:什么时候堆中创建了两个字符串值,什么时候是指向的同一个。

各种父子类,相互赋值,变着花样初始化,调用父子类的同名方法,问你输出什么。

有一个大事务里面,多个方法,同步的,异步的,远程的,问你开启了多少个数据库连接。我还真的答错了,因为我从未见过这样的代码。最后告诉我,事务不要这样写,这好像是我的台词。

以上,要是我们组内开发真的写这样那样千奇百怪的代码,先批评,再问他什么是主流的普通的实现,什么又是优雅的实现。然后大家写一样风格的代码然后一起迭代到更优雅的实现,这也是天下间所有程序员的追求,走大路开大船住大house赚大票子。

好,说的是流程制度和题目本身,人其实都还挺好的,面试双方各种情况都有,十之八九都是过眼云烟,有些还挺乐呵。

如果还有奇怪的代码,先问他java是值传递还是引用传递,然后问他php和java哪个好,go和scala哪个好。其实以上这些问题最常见于上个10年里的线下java培训班,归根结底也不是我要吐槽,是最近有同事笔试面试,以我代他们吐槽。

你可能感兴趣的:(电商go语言笔试题答案)