ARTS挑战打卡第十二周

Algorithm-一周至少一道算法题

Review-阅读并点评至少一篇英文技术文章

Tip-学习至少一个技术技巧,总结和归纳在日常工作中所遇到的知识点

Share-分享一篇有观点和思考的技术文章

ARTS挑战打卡第十二周_第1张图片

01-Algorthm

   —   

https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal

使用先序遍历的顺序构建二叉搜索树。

先用第一个元素做根节点,然后递归创建左右子节点。

02-Review

——————

https://blog.pragmaticengineer.com/the-product-minded-engineer

讲述如何成为一名更有产品思维的工程师,程序员还是不能锁死自己在一个领域,多方面探索新技能,有产品意识的工程师对开发工作和产品讨论需求都有好处。

总结几点:

1、关注业务数据

2、多问为什么,为什么做这个产品,为什么做这个需求?

3、多与非工程师职位的同事交流,开拓思维

4、在技术和产品上做折中,可以是产品配合技术,也可以技术配合产品

5、快速迭代,快速从用户身上获得反馈,改进产品

6、与产品经理维持友好的关系

7、学习所做产品或所在公司的商业模式

03-Tip

——————

1、Java的类库的属性大多数都是final的,final的作用是什么?

当final用来修饰类时,表示类不可以被继承;

当final用来修饰方法时,表示方法不可以被继承的类修改

当final用来修饰变量时,表示变量不可以被修改。

注:如果是基本数据类型的变量,那么变量在初始化之后不可以被修改,如果是引用类型的变量,那么变量在初始化后不可以再指向另一个对象,但是它指向的对象的内容是可变的。

2、线程安全是什么?怎么解决线程安全问题?

在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存)。进程内的所有线程都可以访问到该区域,这就是引起线程安全的潜在原因。

线程安全指的是,在堆内存中的数据可以被任何线程访问到,在没有限制的情况下存在被意外修改的风险。即堆内存空间在没有保护机制的情况下,对多线程来说是不安全的地方,因为放进去的数据,可能被其他线程“破坏”。

当多个线程访问某个方法时,不管你通过怎样的调用方式或者说这些线程如何交替的执行,在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类是线程安全的。

线程安全的数据-局部变量,因为局部变量是定义在方法内,数据是保存在线程的栈内存中,只属于线程自己,是不共享的,所以其他内存无法访问。

可能线程不安全的数据-类成员变量,因为类成员变量不是定义在方法内,数据被分配到公共的堆内存中,堆在多个线程间是共享的,因此有潜在的安全风险。

解决线程安全的方法有哪些?

1、要让公共区域堆内存中的数据对于每个线程都是安全的,那就每个线程都拷贝它一份,每个线程只处理自己的这一份拷贝而不去影响别的线程,那就是ThreadLocal类。

2、数据只能读取,不能修改。其实就是常量或只读变量,它们对于多线程是安全的,想改也改不了。

3、加锁,锁住数据,不让其他线程访问,而加锁的方式有:悲观锁、乐观锁(CAS)

04-Share

—————

【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看-https://www.cnblogs.com/lixinjie/p/a-answer-about-thread-safety-in-a-interview.html

分享原因:迄今为止看到最通俗易懂的一篇介绍线程安全的文章。

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
如果本文对你有帮助,请点个赞吧,谢谢
更多精彩内容,请关注个人公众号。

你可能感兴趣的:(java,编程语言,面试,大数据,多线程)