对于公司突如其来的决定,产品组停止开发,几乎所有人员转至infor开发组。对于公司这样的决定,产品组的人员表示很无赖。至少也要有个提前通知什么的吧。对于我这个刚毕业的菜鸟来说更是一脸懵逼。但是对于这样的决定,我也无能为力,只能做好自己的事情,边学习infor的那套开发流程(确实很low),边准备面试其他公司。毕竟刚出来,如果一直在这样的环境中非但提升不了什么 也只会越来越废(除了对业务的了解)。
记下第一家面试经历:
公司名称:享宇金服
这家公司离我上班的地方比较近加上园区的保安大哥人很好热心指引所以很容易就找到了。去的时候已经有一位先来的哥们儿在面了,安排我在一边坐等。
第一轮项目经理:
先问了我之前做的项目,说实话之前的项目在技术上没有多大难点和突出点,主要都是对业务的理解。延伸出问了多线程的知识点。
1.开多线程的场景?
回答的有:处理大数据量时 访问量大时.
2.根据什么依据来设置线程的数量:
回答:数据量大 处理时间长的 线程数=CPU核数+1
数据量大 处理时间短的 线程数可以设置大些
数据量小 处理时间长的 线程数=CPU核数+1
数据量小 处理时间长的 线程数可以设置大些
3.如果不用Spring自带的线程池 选择Java自带的线程池处理数据大 处理时间长的并发业务 怎么设计?
回答:用FixedThreadPool 假设现在是4核的处理器 我设置线程池大小为5
4.那如果线程池满了 新加的线程就一直阻塞吗? 有没有什么处理方法?
这个没答上来 哪位大神知晓 还请分析下
5.表设计的一些注意事项?
回答:字段规范化 根据实际需求建立索引
在项目中由自己来设计表结构的经历只有一次 平时也没有怎么关注这些细节上的规范 答的很水 下来查了下:
1 表设计 2 3 库名、表名、字段名必须使用小写字母,“_”分割,且名称长度不超过12个字符并且要做到见名知意。 4 5 建议使用InnoDB存储引擎。 6 7 存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。 8 9 建议使用UNSIGNED存储非负数值。 10 11 建议使用INT UNSIGNED存储IPV4。 12 13 整形定义中不添加长度,比如使用INT,而不是INT(4)。 14 15 使用短数据类型,比如取值范围为0-80时,使用TINYINT UNSIGNED。 16 17 不建议使用ENUM类型,使用TINYINT来代替。 18 19 尽可能不使用TEXT、BLOB类型。 20 21 VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N。 22 23 VARCHAR(N),N尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存。 24 25 表字符集选择UTF8。 26 27 使用VARBINARY存储变长字符串。 28 29 存储年使用YEAR类型,存储日期使用DATE类型,存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。 30 31 建议字段定义为NOT NULL。 32 33 将过大字段拆分到其他表中。 34 35 禁止在数据库中使用VARBINARY、BLOB存储图片、文件等。 36 37 索引 38 39 索引名称必须使用小写,非唯一索引必须按照“idx_字段名称_字段名称[_字段名]”进行命名,唯一索引必须按照“uniq_字段名称_字段名称[_字段名]”进行命名。 40 41 索引中的字段数建议不超过5个。 42 43 单张表的索引数量控制在5个以内。 44 45 唯一键由3个以下字段组成,并且字段都是整形时,使用唯一键作为主键。 46 47 没有唯一键或者唯一键不符合4中的条件时,使用自增(或者通过发号器获取)id作为主键。 48 49 唯一键不和主键重复。 50 51 索引字段的顺序需要考虑字段值去重之后的个数,个数多的放在前面。 52 53 ORDER BY,GROUP BY,DISTINCT的字段需要添加在索引的后面。 54 55 使用EXPLAIN判断SQL语句是否合理使用索引,尽量避免extra列出现:Using File Sort,UsingTemporary。 56 57 UPDATE、DELETE语句需要根据WHERE条件添加索引。 58 59 不建议使用%前缀模糊查询,例如LIKE “%weibo”。 60 61 对长度过长的VARCHAR字段建立索引时,添加crc32或者MD5 Hash字段,对Hash字段建立索引。 62 63 合理创建联合索引(避免冗余),(a,b,c)相当于 (a) 、(a,b) 、(a,b,c)。 64 65 合理利用覆盖索引。 66 67 SQL变更需要确认索引是否需要变更并通知DBA。 68 69 SQL语句 70 71 SQL语句中IN包含的值不应过多。 72 73 UPDATE、DELETE语句不使用LIMIT。 74 75 WHERE条件中必须使用合适的类型,避免MySQL进行隐式类型转化。 76 77 SELECT语句只获取需要的字段。 78 79 SELECT、INSERT语句必须显式的指明字段名称,不使用SELECT *,不使用INSERTINTO table。 80 81 使用SELECT column_name1, column_name2 FROM table WHERE[condition]而不是SELECT column_name1 FROM table WHERE[condition]和SELECT column_name2 FROM table WHERE [condition]。 82 83 WHERE条件中的非等值条件(IN、BETWEEN、<、<=、>、>=)会导致后面的条件使用不了索引。 84 85 避免在SQL语句进行数学运算或者函数运算,容易将业务逻辑和DB耦合在一起。 86 87 INSERT语句使用batch提交(INSERT INTO tableVALUES,,……),values的个数不应过多。 88 89 避免使用存储过程、触发器、函数等,容易将业务逻辑和DB耦合在一起,并且MySQL的存储过程、触发器、函数中存在一定的bug。 90 91 避免使用JOIN。 92 93 使用合理的SQL语句减少与数据库的交互次数。 94 95 不使用ORDER BY RAND,使用其他方法替换。 96 97 建议使用合理的分页方式以提高分页的效率。 98 99 统计表中记录数时使用COUNT(*),而不是COUNT(primary_key)和COUNT(1)。 100 101 禁止在从库上执行后台管理和统计类型功能的QUERY。
6.讲一下JVM的内存模型?
回答:一个线程对一个变量的写操作 刷新到主内存中 另一个线程在读的时候先将本地变量作废 再重新到主内存中去取。
7. 设计模式 学习过忘了 balabalabala 还有什么忘了。。。
第二轮面试:总监(一看就是个技术高深莫测的)
1.jdk 1.6用过吗
木有
2.1.7 和1.8 有啥区别呢?
这个没去研究过 只答了个引入红黑树。。。
3.JVM 用的什么GC方法?
青春代用的标记整理 老年代。。。可能是紧张的缘故一下没想起来 过后想起 复制算法
4.在这之前都经历了哪些算法?
看了有段时间 忘了。。
5.数据库索引类型
https://www.cnblogs.com/luyucheng/p/6289714.html
6.SQL优化
回答了几点
还问了些前端的东西 要求能立马学习angular2 去替换前端angular1
总的来说对自己的回答不是很满意 有些紧张 掌握的知识都没有回答好。 刚过完年 还是自己没有准备充分的原因