jushuangqiao / python-offer Goto Github PK
View Code? Open in Web Editor NEW《剑指Offer》面试题Python实现
《剑指Offer》面试题Python实现
有一个疑问,通过 new 实现单例那段代码在多线程下运行还是做不到单例。比如线程 1 在执行完 if 语句且判 true 后,切换到线程 2 。线程 2 成功创建了一个实例。那么线程 1 再执行时又会创建一个实例。
import time
class SingleTon(object):
_instance = {}
def __new__(cls, *args, **kwargs):
print(threading.current_thread())
if cls not in cls._instance:
print('Singleton __new__ is true')
time.sleep(15)
cls._instance[cls] = super(SingleTon, cls).__new__(cls, *args, **kwargs)
return cls._instance[cls]
class Test(SingleTon):
def __init__(self):
print('test __init__')
self.val = 2
def running():
t1 = Test()
print(id(t1))
import threading
th1 = threading.Thread(target=running, name='th1')
th2 = threading.Thread(target=running, name='th2')
th1.start()
th2.start()
##### 输出 #####
<Thread(th1, started 2736)>
Singleton __new__ is true
<Thread(th2, started 3728)>
Singleton __new__ is true
test __init__
2210173698000
test __init__
2210173726848
正则出数字>拼接>int ,这样会不会更简单点。。?(请教中...)
Python-Offer/second/third/six.py
Line 88 in bc82c24
这里如果 right
是 []
的话,会导致 preorder[-len(right):]
的值变成该 preorder
的副本,前序遍历和中序遍历长度不一致,显然是不合理的。
应该写成
root.right = construct_tree(preorder[index + 1:], right)
或者对这一段重新整理一下
index = inorder.index(preorder[0])
root = TreeNode(preorder[0])
root.left = construct_tree(preorder[1:index + 1], inorder[0:index])
root.right = construct_tree(preorder[index + 1:], inorder[index + 1:])
return root
if node == link: # 只有一个结点
del node
这里 node == link 只有在node.next is None 的时候才是只有一个节点。
这里如果node也指向头节点的话也会符合 node == link ,但是并不是只有一个节点。
而且del node只是删除了node这个变量,其实链表根本没有做改变,里面所有节点都还在。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.