84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
这个问题比较模糊,不确定是从数据上面记录还是视觉上体现。朋友说 CSS JS 服务端
CSS
JS
服务端
CSS 我觉得应该是 :visited,类似大概实现,但是肯定有 visited 隐私问题
:visited
visited 隐私问题
那关于 JS 如何实现呢,需要讲明数据流(懵)?
服务端是通过 cookie 么,模拟的是百万条数据,具体实现?
有没有比较详细的解析,指点一二,面试一般都挖的很深。发现每次都是饭点问问题,很快就沉了,也是尴尬。
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
如果面试的是服务端开发,应该不会考你视觉上的体现,是考你如何记录这个问题;如果是面试前端,那考视觉体现也是可能的。
前端来说,虽然 :visited 可以记录哪些点击过,哪些没点击过,但是这个记录并不准备,各个浏览器的处理也不一样,而且一旦清了记录,就不再有效了。所以如果前端要记录的话,最好还是考虑 localStorage(当然清了也失效)。cookie也不是不可能,但 cookie 不适合量较大的数据。
后端来说,这个数据主要是记录在数据库中,处理起来比较复杂。对于关系型数据库来说,最直接的就是记录一个数据 ID 和用户 ID 的关系表,这个表中存在某个数据 ID 和某个 用户 ID 对应的记录,就说明这个数据是这个用户点击过的。当然这张表肯定是巨大的,10万数据和10万用户的情况下这个关系表的数据就是百亿级的……
另外一种方式是采用 NoSQL 数据库的方式(关系型数据库也可以模拟),每个数据后面跟一个点击了的用户列表。或者对每个用户,保存一个点击地的数据ID列表。但即使这样,数据量也是巨大的,关键不在于数据条数,而在于每条数据占用的字节会很大。
目前为止我是没想到更好的办法。
后台的话这不是类似于访问日志吗?数据库建一个访问日志表或者操作记录表,后台用AOP截取对应操作然后保存。
这个面试官不会是听了贺师俊的知乎live吧。。。建议你去听贺师俊的知乎live,里面详细分析了这个问题的各种实现方式,以及各种坑。
如果面试的是服务端开发,应该不会考你视觉上的体现,是考你如何记录这个问题;如果是面试前端,那考视觉体现也是可能的。
前端来说,虽然
:visited
可以记录哪些点击过,哪些没点击过,但是这个记录并不准备,各个浏览器的处理也不一样,而且一旦清了记录,就不再有效了。所以如果前端要记录的话,最好还是考虑 localStorage(当然清了也失效)。cookie也不是不可能,但 cookie 不适合量较大的数据。后端来说,这个数据主要是记录在数据库中,处理起来比较复杂。对于关系型数据库来说,最直接的就是记录一个数据 ID 和用户 ID 的关系表,这个表中存在某个数据 ID 和某个 用户 ID 对应的记录,就说明这个数据是这个用户点击过的。当然这张表肯定是巨大的,10万数据和10万用户的情况下这个关系表的数据就是百亿级的……
另外一种方式是采用 NoSQL 数据库的方式(关系型数据库也可以模拟),每个数据后面跟一个点击了的用户列表。或者对每个用户,保存一个点击地的数据ID列表。但即使这样,数据量也是巨大的,关键不在于数据条数,而在于每条数据占用的字节会很大。
目前为止我是没想到更好的办法。
后台的话这不是类似于访问日志吗?数据库建一个访问日志表或者操作记录表,后台用AOP截取对应操作然后保存。
这个面试官不会是听了贺师俊的知乎live吧。。。
建议你去听贺师俊的知乎live,里面详细分析了这个问题的各种实现方式,以及各种坑。