ARTS 挑战打卡第十二周(200727-200802)
Algorthm
https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal
使用先序遍历的顺序构建二叉搜索树。
先用第一个元素做根节点,然后递归创建左右子节点。
Review
https://blog.pragmaticengineer.com/the-product-minded-engineer
讲述如何成为一名更有产品思维的工程师,程序员还是不能锁死自己在一个领域,多方面探索新技能,有产品意识的工程师对开发工作和产品讨论需求都有好处。
总结几点:
1、关注业务数据
2、多问为什么,为什么做这个产品,为什么做这个需求?
3、多与非工程师职位的同事交流,开拓思维
4、在技术和产品上做折中,可以是产品配合技术,也可以技术配合产品
5、快速迭代,快速从用户身上获得反馈,改进产品
6、与产品经理维持友好的关系
7、学习所做产品或所在公司的商业模式
Tip
1、Java的类库的属性大多数都是final的,final的作用是什么?
当final用来修饰类时,表示类不可以被继承;
当final用来修饰方法时,表示方法不可以被继承的类修改
当final用来修饰变量时,表示变量不可以被修改。
注:如果是基本数据类型的变量,那么变量在初始化之后不可以被修改,如果是引用类型的变量,那么变量在初始化后不可以再指向另一个对象,但是它指向的对象的内容是可变的。
2、线程安全是什么?怎么解决线程安全问题?
在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存)。进程内的所有线程都可以访问到该区域,这就是引起线程安全的潜在原因。
线程安全指的是,在堆内存中的数据可以被任何线程访问到,在没有限制的情况下存在被意外修改的风险。即堆内存空间在没有保护机制的情况下,对多线程来说是不安全的地方,因为放进去的数据,可能被其他线程“破坏”。
当多个线程访问某个方法时,不管你通过怎样的调用方式或者说这些线程如何交替的执行,在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类是线程安全的。
线程安全的数据-局部变量,因为局部变量是定义在方法内,数据是保存在线程的栈内存中,只属于线程自己,是不共享的,所以其他内存无法访问。
可能线程不安全的数据-类成员变量,因为类成员变量不是定义在方法内,数据被分配到公共的堆内存中,堆在多个线程间是共享的,因此有潜在的安全风险。
解决线程安全的方法有哪些?
1、要让公共区域堆内存中的数据对于每个线程都是安全的,那就每个线程都拷贝它一份,每个线程只处理自己的这一份拷贝而不去影响别的线程,那就是ThreadLocal类。
2、数据只能读取,不能修改。其实就是常量或只读变量,它们对于多线程是安全的,想改也改不了。
3、加锁,锁住数据,不让其他线程访问,而加锁的方式有:悲观锁、乐观锁(CAS)
Share
【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看-https://www.cnblogs.com/lixinjie/p/a-answer-about-thread-safety-in-a-interview.html
分享原因:迄今为止看到最通俗易懂的一篇介绍线程安全的文章。
原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
如果本文对你有帮助,请点个赞吧,谢谢
版权声明: 本文为 InfoQ 作者【老胡爱分享】的原创文章。
原文链接:【http://xie.infoq.cn/article/a04c76675b52a96344f326c5a】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论