我们做了一个专门面向IT互联网行业程序员的求职笔试面试备考的题库网站
牛客网 http://www.nowcoder.com?from=v2ex
里面积累了谷歌、腾讯、百度等几十家互联网公司的笔试面试题目。但网站当前有部分题目还没有楼主觉得认可的最佳答案和解释,为了更好的服务程序猿们,我们做了一个活动,悬赏大牛解答,每道题目根据难度对应一定的现金奖励,最高一道题目奖励100元,还有iPhone6、移动硬盘、小米手环等众多好礼相送。
从今天开始到1月29日,我们会在论坛持续更新本贴,每天放出1-3道题目,欢迎大家跟帖解答,最先正确解答出来的朋友将会获得话费充值、笔记本等礼物。获奖的朋友名单会在第二天公布。
今日题目
牛客网数据库里有用户在我们网站上的做题记录,每个做题记录包括
1. 题目ID 2.题目知识点列表 3.题目难度 4.做题得分 5.做题时间
我们希望根据用户的做题记录给用户智能出题,智能出题旨在提高用户刷题效率,需要考虑:
1. 难度适中 精确符合用户的知识水平
2. 查漏补缺 精准化刷题
3. 适当扩延 更加全面了解用户知识体系
这个题目相当开放,我们已经实现了第一个版本的算法,下个迭代会更新上线,不知道大家这个需求有什么建设性的想法,欢迎讨论。
更多有奖答题: http://www.nowcoder.com/activity/challenge?from=v2ex
欢迎大家关注我们,活动结束后我们会把面试题整理成PDF分发给参与的用户
微博 http://www.weibo.com/nowcoder
微信 www_nowcoder_com
技术QQ群 157594705
邮件 admin@nowcoder.com
如果你手里有更多的笔试面试题,也欢迎联系我们,重金求购哦~
昨日答题话费由 @lijinma 斩获。恭喜!
附昨日帖子地址 http://www.v2ex.com/t/159896
附牛客网的敏感词过滤,我们采用了DFA状态机实现,没有语义分析,简单够用
class DFATreeNode {
/**
* true 关键词的终结 ; false 继续
*/
private boolean end = false;
/**
* key下一个字符,value是对应的节点
*/
private Map<Character, DFATreeNode> subNodes = new HashMap<Character, DFATreeNode>();
/**
* 向指定位置添加节点树
*
* @param key
* @param node
*/
public void addSubNode(Character key, DFATreeNode node) {
subNodes.put(key, node);
}
/**
* 获取下个节点
*
* @param key
* @return
*/
public DFATreeNode getSubNode(Character key) {
return subNodes.get(key);
}
public boolean isKeywordEnd() {
return end;
}
public void setKeywordEnd(boolean end) {
this.end = end;
}
public int getSubNodeCount() {
return subNodes.size();
}
}
/**
* 过滤敏感词
*
* @param text
* @return
*/
public String filter(String text) {
if (StringUtils.isBlank(text)) {
return text;
}
String replacement = DEFAULT_REPLACEMENT;
StringBuilder result = new StringBuilder();
DFATreeNode tempNode = rootNode;
int begin = 0; // 回滚数
int position = 0; // 当前比较的位置
while (position < text.length()) {
char c = text.charAt(position);
// 空格直接跳过
if (isSymbol(c)) {
++position;
continue;
}
tempNode = tempNode.getSubNode(c);
// 当前位置的匹配结束
if (tempNode == null) {
// 以begin开始的字符串不存在敏感词
result.append(text.charAt(begin));
// 跳到下一个字符开始测试
position = begin + 1;
begin = position;
// 回到树初始节点
tempNode = rootNode;
} else if (tempNode.isKeywordEnd()) {
// 发现敏感词, 从begin到position的位置用replacement替换掉
result.append(replacement);
position = position + 1;
begin = position;
tempNode = rootNode;
} else {
++position;
}
}
result.append(text.substring(begin));
return result.toString();
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.