首页 文章 精选 留言 我的

精选列表

搜索[禅道],共6139篇文章
优秀的个人博客,低调大师

[算法总结] 3 道题搞定 BAT 面试——堆栈和队列

本文首发于我的个人博客:尾尾部落 0. 基础概念 栈:后进先出(LIFO) image 队列:先进先出(FIFO) image 1. 栈的 java 实现 import java.util.Arrays; public class Stack { private int size = 0; //栈顶位置 private int[] array; public Stack(){ this(10); } public Stack(int init) { if(init <= 0){ init = 10; } array = new int[init]; } /** * 入栈操作 * @param item 入栈的元素 */ public void push(int item){ if(size == array.length){ array = Arrays.copyOf(array, size*2); //扩容操作 } array[size++] = item; } /** * 获取栈顶元素,但栈顶元素不出栈 * @return 栈顶元素 */ public int peek(){ if(size == 0){ //空栈 throw new IndexOutOfBoundsException("栈是空的"); } return array[size-1]; } /** * 出栈,同时获取栈顶元素 * @return */ public int pop(){ int item = peek(); //获取栈顶元素 size--; //直接使元素个数减1,不用清除元素,下次入栈会覆盖旧元素的值 return item; } /** * 判断栈是否已满 * @return */ public boolean isFull(){ return size == array.length; } /** * 判断栈是否为空 * @return */ public boolean isEmpty(){ return size == 0; } public int getSize(){ return size; } } 2. 队列的 java 实现 public class ArrayQueue { private final Object[] queue; //声明一个数组 private int head; private int tail; /** * 初始化队列 * @param capacity 队列长度 */ public ArrayQueue(int capacity){ this.queue = new Object[capacity]; } /** * 入队 * @param o 入队元素 * @return 入队成功与否 */ public boolean put(Object o){ if(head == (tail+1)%queue.length){ //说明队满 return false; } queue[tail] = o; tail = (tail+1)%queue.length; //tail标记后移一位 return true; } /** * 返回队首元素,但不出队 * @return */ public Object peak() { if(head==tail){ //队空 return null; } return queue[head]; } /** * 出队 * @return 出队元素 */ public Object pull(){ if(head==tail){ return null; } Object item = queue[head]; queue[head] = null; return item; } /** * 判断是否为空 * @return */ public boolean isEmpty(){ return head == tail; } /** * 判断是否为满 * @return */ public boolean isFull(){ return head == (tail+1)%queue.length; } /** * 获取队列中的元素个数 * @return */ public int getsize(){ if(tail>=head){ return tail-head; }else{ return (tail+queue.length)-head; } } } 3. 用两个栈实现队列 剑指offer:用两个栈实现队列 LeetCode:Implement Queue using Stacks class MyQueue { Stack<Integer> input = new Stack<Integer>(); Stack<Integer> output = new Stack<Integer>(); /** Push element x to the back of queue. */ public void push(int x) { input.push(x); } /** Removes the element from in front of queue and returns that element. */ public int pop() { peek(); return output.pop(); } /** Get the front element. */ public int peek() { if(output.isEmpty()){ while(!input.isEmpty()) output.push(input.pop()); } return output.peek(); } /** Returns whether the queue is empty. */ public boolean empty() { return input.isEmpty() && output.isEmpty(); } } 4. 用队列实现栈 LeetCode:Implement Stack using Queues class MyStack { Queue<Integer> q1 = new LinkedList<Integer>(); Queue<Integer> q2 = new LinkedList<Integer>(); /** Push element x onto stack. */ public void push(int x) { if(q1.isEmpty()){ q1.add(x); for(int i = 0; i < q2.size(); i++){ q1.add(q2.poll()); } }else{ q2.add(x); for(int i = 0; i < q1.size(); i++){ q2.add(q1.poll()); } } } /** Removes the element on top of the stack and returns that element. */ public int pop() { return q1.isEmpty() ? q2.poll() : q1.poll(); } /** Get the top element. */ public int top() { return q1.isEmpty() ? q2.peek() : q1.peek(); } /** Returns whether the stack is empty. */ public boolean empty() { return q1.isEmpty() && q2.isEmpty(); } } 5. 包含min函数的栈 剑指offer:包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 class MinStack { Stack<Integer> stack = new Stack<Integer>(); Stack<Integer> temp = new Stack<Integer>(); public void push(int x) { stack.push(x); if(temp.isEmpty() || temp.peek() >= x) temp.push(x); } public void pop() { int x = stack.pop(); int min = temp.peek(); if(x == min) temp.pop(); } public int top() { return stack.peek(); } public int getMin() { return temp.peek(); } } 6. 栈的压入、弹出序列 剑指offer:栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) import java.util.ArrayList; import java.util.Stack; public class Solution { public boolean IsPopOrder(int [] pushA, int [] popA) { if(pushA.length != popA.length || pushA.length == 0 || popA.length == 0) return false; Stack<Integer> stack = new Stack<>(); int index = 0; for(int i = 0; i < pushA.length; i++){ stack.push(pushA[i]); while(!stack.empty() && stack.peek() == popA[index]){ stack.pop(); index++; } } return stack.empty(); } }

优秀的个人博客,低调大师

9道前端面试题及答案,赶紧收藏!

1、什么是W3C标准? WEB标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。 2、bootstrap响应式原理 是通过栅格系统和媒体查询实现的 // 小屏幕(平板,大于等于 768px)@media (min-width: @screen-sm-min) { ... }// 中等屏幕(桌面显示器,大于等于 992px)@media (min-width: @screen-md-min) { ... }// 大屏幕(大桌面显示器,大于等于 1200... 3、HTML/XHTM的区别 XHTML 与 HTML 4.01 标准没有太多的不同。 XHTML 元素必须被正确地嵌套。 XHTML 元素必须被关闭。 标签名必须用小写字母。 XHTML 文档必须拥有根元素。 【如果大家对程序员,web前端感兴趣,想要学习的,关注一下小编吧。我是一名前端开发程序员,现在在网上授课教前端,每晚都会在群内免费直播。从最基础的HTML+CSS+JS到移动端HTML5到各种框架都有整理,送给每一位前端小伙伴,这里是小白聚集地,欢迎初学和进阶中的小伙伴。加群:731771211。前端学习必备公众号ID:mtbcxx】 4、页面构架和布局 布局可以是编码方面的,也可以是视觉方面的。 编码方面的涉及到语义化标签(也包含了div+css)布局、iframe框架(特殊地方使用)布局和表格布局(只用于一些特殊的地方,不推荐全站使用),具体你可以百度下了解学习下相关知识。 如果是视觉交互方面的,就比较多了,每年都会有新的设计布局,高级一点的比如视差类型布局,全屏布局,瀑布流,无缝拼图布局等,这些都不局限于传统的布局方式;传统电子商务、信息类的大多采用单栏、两栏或者三栏布局,还有更多栏布局;分辨率相关的宽屏布局和窄屏布局,感应式布局。太多的选择了,要学习的东西也比较多,要慢慢了解啦。还有更多的布局需要慢慢摸索和体验。我把我知道的说了。 至于手机端,例举一些:竖排列表、横排方块、九宫格、TAB切换式、手风琴布局(有多个分类及其内容同时展示)、抽屉/侧边栏、标签场景式),因为屏幕小,要增加用户体验都可以根据具体情况用不同的布局方式。 5、BootStrap学习笔记,优缺点总结 优点: BT的优势之一就是可以根据用户屏幕尺寸调整页面,使其在各个尺寸上都表现良好。 BT预先定义了很多CSS类,使用的时候直接给class赋予对应的类名即可,如text-left,text-align,.table等。最有代表性的就是btn类,BT定义了一个.bt的基础类,如果还想要其他样式可以在这个基础类上进行扩展,实现不同的视觉效果。 BT的JavaScript插件非常丰富,既可以用现成的也可以自己扩充,BT提供了一个集成板的BT.js您可以直接拿过来使用也可以单个使用引入*.js即可。 不足: 对IE兼容也存在不小的问题,BT将所有的元素盒模型都设置成了border-box,这是IE混杂模式下的盒模型,光这点就导致了不能兼容IE。此外还用到了大量的H5标签以及CSS3语法,这些语法标签兼容性方面同样存在不小的问题,当然网上存在很多兼容IE的办法,但需要引入其他文件,有些还不小,势必导致加载速度变慢,影响用户体验。 BT对IE6,7的兼容性肯定不好,对IE8的支持也需要一些额外的文件。 IE8的媒体查询需要response.js的配合才能实现 BT 不支持 IE 古老的兼容模式。为了让 IE 浏览器运行最新的渲染模式下,建议将此 标签加入到你的页面中: 按 F12 键打开 IE 的调试工具,就可以看到 IE 当前的渲染模式是什么。 BT属于前端UI库,可以快速搭建前端页面,以及设计响应式界面,还可以使用saas重新设计组件, 【如果大家对程序员,web前端感兴趣,想要学习的,关注一下小编吧。我是一名前端开发程序员,现在在网上授课教前端,每晚都会在群内免费直播。从最基础的HTML+CSS+JS到移动端HTML5到各种框架都有整理,送给每一位前端小伙伴,这里是小白聚集地,欢迎初学和进阶中的小伙伴。加群:731771211。前端学习必备公众号ID:mtbcxx】 6、JQeury学习笔记,优缺点总结 优点: jQuery实现脚本与页面的分离,是操作DOM的首选js库。 最少的代码做最多的事情 最少的代码做最多的事情,这是jQuery的口号,而且名副其实。使用它的高级selector,开发者只需编写几行代码就能实现令人惊奇的效果。开发者无需过于担忧浏览器差异,它除了还完全支持Ajax,而且拥有许多提高开发者编程效率的其它抽象概念。jQuery把JavaScript带到了一个更高的层次。以下是一个非常简单的示例: 代码如下: $("p.neat").addClass("ohmy").show("slow"); 通过以上简短的代码,开发者可以遍历“neat”类中所有的 元素,然后向其增加“ohmy”类,同时以动画效果缓缓显示每一个段落。开发者无需检查客户端浏览器类型,无需编写循环代码,无需编写复杂的动画函数,仅仅通过一行代码就能实现上述效果。 性能 在大型JavaScript框架中,jQuery对性能的理解最好。尽管不同版本拥有众多新功能,其最精简版本只有18KB大小,这个数字已经很难再减少。jQuery的每一个版本都有重大性能提高。 插件 基于jQuery开发的插件目前已经有大约数千个。开发者可使用插件来进行表单确认、图表种类、字段提示、动画、进度条等任务。 节省开发者学习时间 当然要想真正学习jQuery,开发者还是需要投入一点时间,尤其是如果你要编写大量代码或自主插件的话,更是如此。但是,开发者可以采取“各个击破”的方式,而且jQuery提供了大量示例代码,入门是一件非常容易的事情。 不足: 不能向后兼容 插件兼容性。 jQuery的稳定性 在大型框架中,jQuery核心代码库对动画和特效的支持相对较差。 7、”高内聚 ,低耦合“到底是什么意思? ‘高内聚,低耦合’是相对于代码而言,一个项目中: 每个模块之间相互联系的紧密程度,模块之间联系越紧密,则耦合性越高,模块的独立性就越差!反之同理; 一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越高,则内聚性越高,即‘高内聚’ ! 如:一个项目中有20个方法调用良好,但是要修改了其中一个,另外的19个都要进行修改,这就是高耦合!独立性太差! 现在的软件结构设计,都会要求“高内聚,低耦合”,来保证软件的高质量!mark! 8、对前后端联合开发 的技术原理(Ajax、Json)有一定认识,理解DOM、Xml概念, 熟悉前后台交互方式。 Ajax异步交互原理:Ajax其核心有JavaScript、XMLHTTPRequest、DOM对象组成,通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用JavaScript来操作DOM而更新页面。 Json:一般我用的比较多的是通过AJAX异步来获取JSON数据。 DOM:文档对象模型,一个网页中所有的东西都是dom节点,根节点是,它可以无线嵌套。用来获取或设置文档中标签的属性,例如获取或者设置input表单的value值。 BOM:浏览器对象模型。用来获取或设置浏览器的属性、行为,例如:新建窗口、获取屏幕分辨率、浏览器版本号等。 XML:被设计用来传输和存储数据,被设计用来格式化和显示数据。仅仅是纯文本。 -前后台交互方式: 9、GET和POST请求的区别 GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。 GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码. 【如果大家对程序员,web前端感兴趣,想要学习的,关注一下小编吧。我是一名前端开发程序员,现在在网上授课教前端,每晚都会在群内免费直播。从最基础的HTML+CSS+JS到移动端HTML5到各种框架都有整理,送给每一位前端小伙伴,这里是小白聚集地,欢迎初学和进阶中的小伙伴。加群:731771211。前端学习必备公众号ID:mtbcxx】

优秀的个人博客,低调大师

3道Python题,9种解法,你能想出几种

1.字母转换问题 题目要求: 你得到一个可能混合大小写字母的字符串,你的任务是把该字符串转为仅使用小写字母或者大写字母,为了尽可能少的改变: 如果字符串包含的大字母数小于等于小写字母数,则把字符串转为小写。 如果大写的数目大于小写字母数,则把字符串转为全大写。 比如: solve('coDe')=="code" solve("CODe")=="CODE" 这道题稍微简单一点,怎么解呢: 1).屌丝解法: 对字符串中的每个字符进行判断大写还是小写 大写则计数+1,小写也+1 比较两种计数的大小,然后对字符串进行大小写反转 2).进阶解法 稍微把算法优化一下,我们对小写的取-1,大写的取1,然后计算和。 大于0则全部大写,否则则全部小写 3).高手解法 这种解法绝对让人拍案叫绝,值得思考。 2.数独问题 题目要求: 写一个函数检验数独是否完成: 如果完成,返回 “Finished!” 如果未完成,返回 “Try again!” 数独规则 数独为9行9列。 每一行和每一列均由 [1-9] 9个不重复数字组成。 将 9行x9列 的数独分割为9个小区域,每个区域3行3列,且保证每个小区域数字也是从[1-9] 9 个不重复数组成。 屌丝解题思路: board = [[1, 3, 2, 5, 7, 9, 4, 6, 8],[4, 9, 8, 2, 6, 1, 3, 7, 5],[7, 5, 6, 3, 8, 4, 2, 1, 9],[6, 4, 3, 1, 5, 8, 7, 9, 2],[5, 2, 1, 7, 9, 3, 8, 4, 6],[9, 8, 7, 4, 2, 6, 5, 3, 1],[2, 1, 4, 9, 3, 5, 6, 8, 7],[3, 6, 5, 8, 1, 7, 9, 2, 4],[8, 7, 9, 6, 4, 2, 1, 3, 5]] 1).可以将上边列表看成一个矩阵图形 首先要满足的条件是行和列都必须由[1-9] 9个不重复的数组成。判断行是否满足条件:遍历列表 board,然后对每个元素(行)进行去重然后计算长度,生成一个新列表 row_len=[len(set(row)) for row in board]# 结果为:[9, 9, 9, 9, 9, 9, 9, 9, 9]# 说明每一行去重后仍有9个元素,说明没有重复元素# 最后只需要判断新生成的列表row_len 元素之和是否等于 81,就可以知道每一行是否有重复数字。 小编推荐一个学Python的学习裙【 二二七,四三五,四五零 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!希望新手少走弯路。 2).判断列是否满足条件 将 board 行列转换,然后像判断行一样进行判断 board2 = map(list,zip(*board))# 结果:[[1, 4, 7, 6, 5, 9, 2, 3, 8],[3, 9, 5, 4, 2, 8, 1, 6, 7], [2, 8, 6, 3, 1, 7, 4, 5, 9], [5, 2, 3, 1, 7, 4, 9, 8, 6], [7, 6, 8, 5, 9, 2, 3, 1, 4], [9, 1, 4, 8, 3, 6, 5, 7, 2], [4, 3, 2, 7, 8, 5, 6, 9, 1], [6, 7, 1, 9, 4, 3, 8, 2, 3], [8, 5, 9, 2, 6, 1, 7, 4, 5]] 3).最后判断行和列是否都满足条件 def done_or_not(board): if sum([len(set(col)) for col in board2]) == 81 and sum([len(set(row)) for row in board]) ==81 : pass else: return 'Try again!' 4).怎么分成9个小块呢 使用numpy 将列表转换为 array ,然后使用切片很方便的得到小区域,例如: import numpy as npboard_array = np.array(board)board_array[0:3,0:3] #取第一行到第三行,第1列到第3列的,3x3小区块#结果:array([[1, 3, 2], [4, 9, 8], [7, 5, 6]])那分成9个小区块就是:board_array[0:3,0:3]board_array[0:3,3:6]board_array[0:3,6:9]board_array[3:6,0:3]board_array[3:6,3:6]board_array[3:6,6:9]board_array[6:9,0:3]board_array[6:9,3:6]board_array[6:9,6:9] 可以看到每个小区块也是一个二维列表,将二维列表转成一维列表后进行去重就可以知道这个小区块有没有重复出现的数字,进而可以判断是否符合数独条件。 import numpy as npdef done_or_not(board): board2 = map(list,zip(*board)) if sum([len(set(row)) for row in board2]) == 81 and sum([len(set(row)) for row in board]) ==81 : board_array = np.array(board) x = [0,3,6,9] for y in range(0,len(x)-1): for j in range(0,len(x)-1): z = board_array[x[y]:x[y+1],x[j]:x[j+1]] if len(set([num for row in z for num in row ])) != 9: return 'Try again!' return 'Finished!' else: return 'Try again!' 2.看高手的解法 涉及到多维数组的处理,可以直接用numpy里面的vstack来处理,会简洁和方便 import numpy as npdef done_or_not(aboard): #board[i][j] board = np.array(aboard) rows = [board[i,:] for i in range(9)] # 取行 cols = [board[:,j] for j in range(9)] #取列 sqrs = [board[i:i+3,j:j+3].flatten() for i in [0,3,6] for j in [0,3,6]] # 分区 for view in np.vstack((rows,cols,sqrs)): if len(np.unique(view)) != 9: return 'Try again!' return 'Finished!' 3.神一样的解法 在上面用numpy的基础上,进一步巧妙的利用not all的用法 import numpy as npdef done_or_not(board): rows = np.array(board) cols = np.transpose(rows) subs = [np.ndarray.flatten(rows[x:x+3, y:y+3]) for x in range(0,9,3) for y in range(0,9,3)] for test in [rows, cols, subs]: if not all(sorted(group) == range(1,10) for group in test): return 'Try again!' return 'Finished!' 3.找出下一个大的数字 题目: 给定一个数字比如138,找出这个数字组合后下一个大的数字,比如138,183,318,813,831,很显然下一个大一点的数字是183。 这道题怎么解呢: 1).屌丝解法: 我们用最简单的暴力破解,先把数字转为字符列表,然后排列组合所有的情况,再把字符转给数字,然后排序,取比原来数字大的那一个就行了。 首先我们利用itertool库里面的牛逼闪闪的permutations,可以对一个列表进行全排序 接着我们把排序好的字符里面,用迭代器合成为一个一个数字 把数字列表进行从大到小的排序,找出比当前数字大的数字,即index+1 如果没有报错,则返回为-1 我们用assert测一下看看: assert next_bigger(50)==-1 assert next_bigger(13)==31 assert next_bigger(217)==271 assert next_bigger(16318)==16381 完全正确,那么上面的解法有什么缺点吗,确实就是耗时,比如我们现在一个15位的数字需要查询,全排序显然不是上策!我们接着看第二种: 2).优化算法,进阶解法 既然全排序不行,那就要想一个算法来解决这个问题,比如16318,显然16381是比它大的,因为我是倒着来的,个位数比十位数大,那么取反之后就可以得到一个比原来大的数字。所以我们的思路: 我们是反向操作:从n个位开始依次和n+1(十位),n+2(百位),n+3(千位),n+4(万位)...进行比较 如果发现有大的数字,把n插入到n+1那里,同时把原来的n挪走,得到一个新的数字,放入我们的新列表 个位循环完毕,循环十位,依次重复上面的算法 最后在新的列表中找出最小的那个数字就行了! 3).神一样的解法 这几道题目不知道有没有给大家一些启发,一题多解是一个比较好的小白进阶技巧!其实经常刷刷题提高一下自己的基本功还是很有好处的,同时还可以膜拜一下高手的解法,会让你豁然开朗,欢迎大家留言讨论哦.

优秀的个人博客,低调大师

物联网(IoT)会是广告欺诈的一道后门

在安全社区,工程师门对物联网(IoT)有其自己的名称。他们称其为“不安全物联网”。 “在未来,甚至灯泡都将通过WiFi控制,”IEEE的高级会员和北爱尔兰阿尔斯特大学的高级计算机科学讲师KevinCurran说,“以后,人们将不得不更新他们的灯泡。他们准备好了吗?” 人们并不担心他们的设备,这才是真正的安全风险。智能婴儿监视器、网络摄像头、家庭安全系统、恒温器、冰箱和可穿戴式设备都是极易受到安全漏洞攻击的小型特洛伊木马。未来这些影响范围非常广,甚至延伸至广告欺诈。 当消费者忘记更新他们的物联网设备时,可能就是问题开始的时候,而且极有可能。许多设备甚至无法安全运行,因为其内存空间有限且处理器很慢,Curran说。 “此类设备给网络罪犯留下了安装脚本的场所,他们借此进入网络,”Curran说。“这是挂在低处的水果。随着时间的推移,漏洞利用会愈加完善。而插件越多,人们就越懒得更新它们。” 这简直就是通往物联网敞开后门的智能红地毯。 甚至有一个叫Shodan的网站,允许访客搜索连接到互联网的任何设备以及相关联的IP地址和默认密码,消费者往往忽略更改密码。这个网站好比是物联网界的谷歌。 而且因为万物相连,甚至有可能链接到广告欺诈。“如果你有一台能够生成可视展现数和穿过所有设备隧道的中心计算机,即使一个浏览器没有设置,也可将其转化为一个开放的代理,” Forensiq创始人兼首席执行官 DavidSendroff说。“全国和全球各地都有IP地址被用于欺诈。物联网只是代理的一个新出口。” 在安全社区还有另一种说法,Curran说:“如果你想要安全地在线,就别买电脑,如果你买了一台电脑,不要插电源。”否则,只要使用设备,必定会被利用。 虽然可信赖问责组织(TrustworthyAccountability Group,由IAB、ANA和4A组成的行业内反欺诈联盟)尚未对物联网做出正式的评论,但其主要聚焦领域之一就是恶意软件。 “罪犯通过恶意代码段传播恶意软件,通常是通过广告,然后接管人们的电脑并创建僵尸网络,”TAG总裁兼首席执行官Mike Zaneis说。“他们从那里可以生成他们想要的任何级别的欺诈性流量,并将流量推送到其自己的网站,这些网站通常充斥大量盗版内容。” 从理论上讲,这类活动不会局限于网络广告领域。 “试想这样一个可怕场景:有人购买了某一特定型号家庭路由器的零日漏洞,如果他们有正确的网卡、桌面计算机上的软件且能连接到互联网,就有可能扫描数十亿的IP地址以找到这些设备,然后他们以每天一百万的速度安装一个无界面浏览器,借此实施广告欺诈,并且赚得盆满钵满,”Forensiq首席科学家Mike Andrews说。 Curran说得更直白:“在未来,当烤箱连接到互联网时,你怎么知道它们不会运行一个僵尸网络呢?” 当然,众所周知,骗子跟着钱走,这就是物联网欺诈以后面临的场景。MediaTrust的首席风险官Alex Calic说他的团队已经注意到“一些早期活动,这使我们意识到坏人正测试通过这些平台能得到些什么。” Media Trust运营一个恶意软件监测网络。虽然其大部分业务是密切关注网络,但联网电视和游戏控制台也是其业务范围的一部分。 “智能电视内部装有应用程序,对罪犯而言,这是一片广阔的运动场,他们能大展身手,”Calic说。“随着广告科技生态系统变得更加成熟和智能以及更加擅长在电视和设备中投放广告,你就会看到恶意软件开始扩散。” 有两种基本类型的安全入侵,Calic说。一种是人们试图侵入一个特定的网络或平台。另一种是使用第三方代码进入这些环境。“广告技术是目前最大的第三方代码——注册自助式服务,你会很快通过生态系统获得恶意软件,”Calic说。“广告技术会将网络罪犯带到那些新环境中。这比蛮力攻击更加简单。” 本文转自d1net(转载)

优秀的个人博客,低调大师

从一道 Linux DHCP 配置题看懂 dhcpd.conf

DHCP 是 Dynamic Host Configuration Protocol 的缩写,也就是动态主机配置协议。它解决的问题非常实际,我们的计算机、手机或者服务器接入一个网络时,往往需要得到 IP 地址、子网掩码、默认网关、DNS 服务器等网络参数。如果所有设备都依靠管理员手工配置,几十台机器尚且能够维护,到了几百台甚至几万台终端时,人工维护成本就会迅速失控。

优秀的个人博客,低调大师

46 道阿里巴巴 Java 面试题,你会几道?

做技术的有一种资历,叫做通过了阿里的面试。 这些阿里Java相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐。 希望对大家帮助,祝面试成功,有个更好的职业规划。 1 面试常见问题 1、微信红包怎么实现。 2、海量数据分析。 3、测试职位问的线程安全和非线程安全。 4、HTTP2.0、thrift。 5、面试电话沟通可能先让自我介绍。 6、分布式事务一致性。 7、nio的底层实现。 8、jvm基础是必问的,jvm GC原理,JVM怎么回收内存。 9、Java是什么。 10、API接口与SDI接口的区别(API是提供给别人的接口)。 11、dubbo如何一条链接并发多个调用。Dubbo的原理,序列化相关问题。 12、用过哪些中间件。 13、做过工作流引擎没有。 14、以前的工作经历,自己觉得出彩的地方(钉钉) 15、线程池的一些原理,锁的机制升降级(天猫、蚂蚁) 16、从系统层面考虑,分布式从哪些纬度考虑(天猫) 17、Hadoop底层怎么实现(天猫) 18、threadLocal,线程池,hashMap/hashTable/coccurentHashMap等(天猫) 19、秒杀系统的设计(天猫) 20、虚拟机,IO相关知识点(天猫) 21、Linux的命令(天猫) 22、一个整形数组,给定一个数,在数组中找出两个数的和等于这个数,并打印出来,我写的时间复杂度高,要求O(n)。(天猫) 23、n个整数,找出连续的m个数加和是最大。(天猫) 24、更重视开源技术(蚂蚁金服上海) 25、数据库锁隐原理(蚂蚁金服网商) 26、1000个线程同时运行,怎么防止不卡(航旅) 27、并列的并发消费问题(航旅) 28、高并发量大的话怎么处理热点,数据等(蚂蚁金服) 29、如何获取一个本地服务器上可用的端口 30、流量控制相关问题(蚂蚁金服) 31、数据库TPS是多少,是否进行测试过(天猫) 32、缓存击穿有哪些方案解决(天猫) 33、Java怎么挖取回收器相关原理(财富) 34、Java的集合都有哪些,都有什么特点(信息平台) 35、分布式锁,redis缓存,springaop,系统架构图,MySQL的特性(信息平台) 36、场景,同时给10万个人发工资,怎么样设计并发方案,能确保在1分钟内全部发完打个比方会提出类似的场景(信息平台) 本套试题仅供大家参考,没有标准答案,更多面试题请在Java技术栈微信公众号后台回复关键字:面试,为你整理了N套主流的Java技术面试题。 2 阿里HR面试时的核心问题 1、你为什么离职? 2、你怎么看待自己的职涯?(包括工作和家庭的分配,怎么平衡家庭和工作的关系、加班、选择一家公司时的考量、location等) 3、薪资期望(不要直接说数,绝不能表现出没到多少钱或者什么层级我就不去,这是味道问题不是能力问题) 3 候选人被问过的一些题目 1、项目中遇到的最大挑战是什么?怎么解决的? 2、最有成就感的事情是? 3、你为什么选择阿里? 4、说说自己性格上的优缺点(描述一下自己的性格) 5、自己觉得自己工作上的短板/优点是什么? 6、怎么看待加班(你能接受996、997、007吗)? 如果候选人的调性符合(足够官方),可以这么回答:我觉得我们要实现梦想,一定是要付出比较多努力的,所以我已经做好了准备,也愿意和小伙伴们一起战斗我是可以加班的,我现在加班强度就是比较大的。因为我喜欢这个事情,我想把这个事情做好。 7、可以接受降薪吗? (像蚂蚁这种你懂的)如果候选人的调性符合(足够官方),可以这么回答:我也理解蚂蚁金服现在的薪资架构,我相信公司会根据我的能力给出一个合理的薪水方案,我相信只要把事情做好,该有的一定会有的对于蚂蚁这样的部门。 “我们在创造历史、我们在做一个从来没有人做过的事情,所以肯定是有难度的,肯定是要付出大量努力的 ”,面试官会特别喜欢这样的话。 本套试题仅供大家参考,没有标准答案,更多面试题请在Java技术栈微信公众号后台回复关键字:面试,为你整理了N套主流的Java技术面试题。 4 面试技巧 1、答非所问: 感觉到答案说出来对方会不待见的时候,可以这么做:有关联性的答非所问,注意强调自己的想法,争取让面试官能够共情,比如深圳的房价可以引人共情、电商相关的大平台、稳定、有上升空间等。 2、面试的状态很重要: 两个例子,上月一个成功offer的候选人,非互联网背景,公司也不是一线的,但是面试时表现出对阿里很强烈的兴趣,HR事后特地向我们提到,对这位候选人印象很深刻; 另一位今天刚挂的候选人,两轮技术都是一举拿下,最后HR面挂了,HR给我们的反馈是,候选人刚从自己的创业公司离职,貌似情绪很低落,对自己也没什么想法。 综上所述,面试时既不要唯唯诺诺,过于被动,也不要过于夸张,而是在于展现自己对一个不错机会的尊重和争取,让面试官觉得你对他们,对这个岗位有很大的兴趣。 5 注意事项 1、阿里比绝大部分公司更看重情怀和梦想 阿里的八字箴言:乐观、聪明、皮实、自省 2、阿里里面的HR都是懂业务的,会结合对候选人的判断和业务的把控进行筛选,不要忽悠他们....... 欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册