如果你已经通过了招聘人员的电话面试,那么下面正是该展现你代码能力的时候了。无论是练习,作业,还是现场白板面试,这都是你证明自己的代码技巧的时刻。我们知道面试官常常会出一些题让你来解决,作为一名程序员,除了需要具备解决问题的思路以外,代码的质量和简洁性也很关键。因为从一个人的代码可以直接看出你的基本功。对于Python而言,这就意味着你需要对Python的内置功能和库有很深入的了解。本篇给大家介绍一些很强大的功能,它们能让面试官眼前一亮,觉得你很高级,这可以很大程度上给你加分。对于这些功能,我们从Python内置函数开始,然后是Python对数据结构的天然支持,最后是Python强大的标准库。选择正确的内置功能Python有一个大型标准库,但只有一个内置函数的小型库,这些函数总是可用的,不需要导入。它们每一个都值得我们仔细研究,但是在研究前,我还是给大家一些小的提示,尤其是在其中一些函数的情况下,可以用什么替代更好。1. 使用enumerate()而不是range()进行迭代在面试中,这种情况可能比任何其他情况都要多:您有一个元素列表,您需要遍历列表,同时访问索引和值。有一个名为FizzBuzz的经典编码面试问题可以通过迭代索引和值来解决。在FizzBuzz中,你将获得一个整数列表,任务是执行以下操作:

  • 用“fizz”替换所有可被3整除的整数

  • 用“buzz”替换所有可被5整除的整数

  • 将所有可被3和5整除的整数替换为“fizzbuzz”

通常,开发人员将使用range()解决此问题:

>>> numbers = [45, 22, 14, 65, 97, 72]>>> for i in range(len(numbers)):...     if numbers[i] % 3 == 0 and numbers[i] % 5 == 0:...         numbers[i] = 'fizzbuzz'...     elif numbers[i] % 3 == 0:...         numbers[i] = 'fizz'...     elif numbers[i] % 5 == 0:...         numbers[i] = 'buzz'...>>> numbers['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

Range允许你通过索引访问数字元素,并且对于某些特殊情况也是一个很有用的工具。但在这种情况下,我们希望同时获取每个元素的索引和值,更优雅的解决方案使用enumerate():

>>> numbers = [45, 22, 14, 65, 97, 72]>>> for i, num in enumerate(numbers):...     if num % 3 == 0 and num % 5 == 0:...         numbers[i] = 'fizzbuzz'...     elif num % 3 == 0:...         numbers[i] = 'fizz'...     elif num % 5 == 0:...         numbers[i] = 'buzz'...>>> numbers['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

对于每个元素,enumerate()返回一个计数器和元素值。计数器默认为0,也是元素的索引。不想在0开始你的计数?只需使用可选的start参数来设置偏移量:

>>> numbers = [45, 22, 14, 65, 97, 72]>>> for i, num in enumerate(numbers, start=52):...     print(i, num)...52 4553 2254 1455 6556 9757 72

通过使用start参数,我们访问所有相同的元素,从第一个索引开始,但现在我们的计数从指定的整数值开始。2. 使用递推式构造列表而不是map()和filter() 

“我认为删除filter()和map()是非常有争议的。” - Guido van Rossum,Python的创造者

一般使用者可能错误地认为它没有争议,但Guido有充分的理由想要从Python中删除map()和filter()。一个原因是Python支持递推式构造列表,它通常更容易阅读并支持与map()和filter()相同的功能。 让我们首先看看我们如何构造对map()的调用以及等效的递推构造列表:

>>> numbers = [4, 2, 1, 6, 9, 7]>>> def square(x):...     return x*x...>>> list(map(square, numbers))[16, 4, 1, 36, 81, 49]>>> [square(x) for x in numbers][16, 4, 1, 36, 81, 49]

使用map()和列表推导的两种方法都返回相同的值,但列表推导更容易阅读和理解。下面我们可以对filter()及其等效的列表推导做同样的事情:

>>> def is_odd(x):...    return bool(x % 2)...>>> list(filter(is_odd, numbers))[1, 9, 7]>>> [x for x in numbers if is_odd(x)][1, 9, 7]

就像我们在map中看到的那样,filter和列表推导方法返回相同的值,但列表推导更容易理解。 来自其他语言的开发人员可能不同意构造列表比map和filter更容易阅读,但根据我的经验,初学者能够更直观地写出列表推导。但无论哪种方式,在编码面试中使用列表推导很少会出错,因为它会让你知道Python中最常见的是什么。3. 使用断点breakpoint()调试而不是print()你可能通过在代码中添加print并查看打印出的内容来调试一个小问题。这种方法起初效果很好,但很快变得很麻烦。另外,在编码面试设置中,你几乎不希望在整个代码中调用print()。 相反,你应该使用调试器。对于不是很琐碎的错误,它几乎总是比使用print()更快,并且鉴于调试是编写软件的重要部分,它表明你知道如何使用可以在工作中快速开发的工具。 如果你使用的是Python 3.7,则无需导入任何内容,只需在代码中要放入调试器的位置调用breakpoint():

# Some complicated code with bugsbreakpoint()

调用breakpoint()会将你带入pdb,这是默认的Python调试器。在Python 3.6及更早版本中,你可以通过显式导入pdb来执行相同的操作:

import pdb; pdb.set_trace()

像breakpoint()一样,pdb.set_trace()会将你带入pdb调试器。它不是那么简洁,而且需要记住的多一点。你可能想要尝试其他调试器,但pdb是标准库的一部分,因此它始终可用。无论你喜欢哪种调试器,在进行编码面试设置之前,都值得尝试使用它们来适应工作流程。4. 使用f-Strings格式化字符串 Python有很多不同的方法来处理字符串格式化,有时候不知道使用哪个。在coding的面试中,如果使用Python 3.6+,建议的格式化方法是Python的f-strings。 f-strings支持使用字符串格式化迷你语言,以及强大的字符串插值。这些功能允许你添加变量甚至有效的Python表达式,并在添加到字符串之前在运行时对它们进行评估:

>>> def get_name_and_decades(name, age):...     return f"My name is {name} and I'm {age / 10:.5f} decades old."...>>> get_name_and_decades("Maria", 31)My name is Maria and I'm 3.10000 decades old.

f-string允许你将Maria放入字符串中,并在一个简洁的操作中添加具有所需格式的年龄。需要注意的一个风险是,如果你输出用户生成的值,那么可能会带来安全风险,在这种情况下,模板字符串可能是更安全的选择。5. 使用sorted()对复杂列表进行排序大量的编码面试问题需要进行某种排序,并且有多种有效的方法可以进行排序。除非面试官希望你实现自己的排序算法,否则通常最好使用sorted()。你可能已经看到了排序的最简单用法,例如按升序或降序排序数字或字符串列表:

>>> sorted([6,5,3,7,2,4,1])[1, 2, 3, 4, 5, 6, 7]>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)['rhino', 'dog', 'cheetah', 'cat', 'bear]

默认情况下,sorted()已按升序对输入进行排序,而reverse关键字参数则按降序排序。值得了解的是可选关键字key,它允许你在排序之前指定将在每个元素上调用的函数。添加函数允许自定义排序规则,如果要对更复杂的数据类型进行排序,这些规则特别有用:

>>> animals = [...     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},...     {'type': 'elephant', 'name': 'Devon', 'age': 3},...     {'type': 'puma', 'name': 'Moe', 'age': 5},... ]>>> sorted(animals, key=lambda animal: animal['age'])[    {'type': 'elephant', 'name': 'Devon', 'age': 3},    {'type': 'puma', 'name': 'Moe', 'age': 5},    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},]

通过传入一个返回每个元素年龄的lambda函数,可以轻松地按每个字典的单个值对字典列表进行排序。在这种情况下,字典现在按年龄按升序排序。有效利用数据结构算法在面试中得到了很多关注,但数据结构可能更为重要。在coding面试环境中,选择正确的数据结构会对性能产生重大影响。除了理论数据结构之外,Python还在其标准数据结构实现中内置了强大而方便的功能。这些数据结构在面试中非常有用,因为它们默认为你提供了许多功能,让你可以将时间集中在问题的其他部分。1. 使用set存储唯一值我们通常需要从现有数据集中删除重复元素。新的开发人员有时会在列表应该使用集合时执行此操作,这会强制执行所有元素的唯一性。假装你有一个名为get_random_word()的函数。它将始终从一小组单词中返回一个随机选择:

>>> import random>>> all_words = "all the words in the world".split()>>> def get_random_word():...    return random.choice(all_words)

你应该重复调用get_random_word()以获取1000个随机单词,然后返回包含每个唯一单词的数据结构。以下是两种常见的次优方法和一种好的方法。糟糕的方法get_unique_words()将值存储在列表中,然后将列表转换为集合:

>>> def get_unique_words():...     words = []...     for _ in range(1000):...         words.append(get_random_word())...     return set(words)>>> get_unique_words(){'world', 'all', 'the', 'words'}

这种方法并不可怕,但它不必要地创建了一个列表,然后将其转换为集合。面试官几乎总是注意到(并询问)这种类型的设计选择。更糟糕的做法为避免从列表转换为集合,你现在可以在不使用任何其他数据结构的情况下将值存储在列表中。然后,通过将新值与列表中当前的所有元素进行比较来测试唯一性:

>>> def get_unique_words():...     words = []...     for _ in range(1000):...         word = get_random_word()...         if word not in words:...             words.append(word)...     return words>>> get_unique_words()['world', 'all', 'the', 'words']

这比第一种方法更糟糕,因为你必须将每个新单词与列表中已有的每个单词进行比较。这意味着随着单词数量的增加,查找次数呈二次方式增长。换句话说,时间复杂度在O(N^2)的量级上增长。 优秀的方法 现在,你完全跳过使用列表,而是从头开始使用一组:

>>> def get_unique_words():...     words = set()...     for _ in range(1000):...         words.add(get_random_word())...     return words>>> get_unique_words(){'world', 'all', 'the', 'words'}

除了从头开始使用集合之外,这可能与其他方法没有太大的不同。如果你考虑.add()中发生了什么,它甚至听起来像第二种方法:得到单词,检查它是否已经在集合中,如果没有,则将其添加到数据结构中。 那么为什么使用与第二种方法不同的集合呢? 它们是不同的,因为集合存储元素的方式允许接近恒定时间检查值是否在集合中,而不像需要线性时间查找的列表。查找时间的差异意味着添加到集合的时间复杂度以O(N)的速率增长,这在大多数情况下比第二种方法的O(N^2)好得多。2. 使用生成器节省内存前面提到,列表推导是方便的工具,但有时会导致不必要的内存使用。想象一下,你被要求找到前1000个完美正方形的总和,从1开始。你知道列表推导,所以你快速编写一个有效的解决方案:

>>> sum([i * i for i in range(1, 1001)])333833500

解决方案会列出1到1,000,000之间的每个完美平方,并对值进行求和。你的代码会返回正确的答案,但随后您的面试官会开始增加您需要总和的完美正方形的数量。 起初,你的功能不断弹出正确的答案,但很快就开始放慢速度,直到最后这个过程似乎永远持续下去。这不是你想要在面试中发生的一件事。 这里发生了什么? 它正在列出你要求的每个完美的方块,并将它们全部加起来。具有1000个完美正方形的列表在计算机术语中可能不会很大,但是1亿或10亿是相当多的信息,并且很容易占用计算机的可用内存资源。这就是这里发生的事情。值得庆幸的是,有一种解决内存问题的快捷方法。你只需用括号替换方括号:

>>> sum((i * i for i in range(1, 1001)))333833500

换出括号会将列表推导更改为生成器表达式。当你知道要从序列中检索数据,但不需要同时访问所有数据的时候,生成器表达式非常适合。 生成器表达式返回生成器对象,而不是创建列表。该对象知道它在当前状态中的位置(例如,i = 49)并且仅在被要求时计算下一个值。 因此,当sum通过重复调用.__ next __()来迭代生成器对象时,生成器检查i等于多少,计算i * i,在内部递增i,并将正确的值返回到sum。该设计允许生成器用于大量数据序列,因为一次只有一个元素存在于内存中。3. 使用.get()和.setdefault()在字典中定义默认值 最常见的编程任务之一涉及添加,修改或检索可能在字典中或可能不在字典中的项。Python字典具有优雅的功能,可以使这些任务简洁明了,但开发人员通常会在不需要时检查值。 想象一下,你有一个名为cowboy的字典,你想得到那个cowboy的名字。一种方法是使用条件显式检查key:

>>> cowboy = {'age': 32, 'horse': 'mustang', 'hat_size': 'large'}>>> if 'name' in cowboy:...     name = cowboy['name']... else:...     name = 'The Man with No Name'...>>> name'The Man with No Name'

此方法首先检查字典中是否存在name键,如果存在,则返回相应的值。否则,它返回默认值。 虽然清楚地检查key确实有效,但如果使用.get(),它可以很容易地用一行代替:

>>> name = cowboy.get('name', 'The Man with No Name')

get()执行与第一种方法相同的操作,但现在它们会自动处理。如果key存在,则返回适当的值。否则,将返回默认值。 但是,如果你想在仍然访问name的key时使用默认值更新字典呢?.get()在这里没有真正帮助你,所以你只需要再次显式检查这个值:

>>> if 'name' not in cowboy:...     cowboy['name'] = 'The Man with No Name'...>>> name = cowboy['name']

检查values并设置默认值是一种有效的方法,并且易于阅读,但Python再次使用.setdefault()提供了更优雅的方法:

>>> name = cowboy.setdefault('name', 'The Man with No Name')

.setdefault()完成与上面代码片段完全相同的操作。它检查cowboy中是否存在名称,如果是,则返回该值。否则,它将cowboy ['name']设置为The Man with No Name并返回新值。利用Python的标准库默认情况下,Python提供了许多功能,这些功能只是一个导入语句。它本身就很强大,但知道如何利用标准库可以增强你的编码面试技巧。从所有可用模块中挑选最有用的部分很困难,因此本节将仅关注其实用功能的一小部分。希望这些对您在编码访谈中有用,并且您希望了解更多有关这些和其他模块的高级功能的信息。1. 使用collections.defaultdict()处理缺少的字典键 当你为单个键设置默认值时,.get()和.setdefault()可以正常工作,但通常需要为所有可能的未设置键设置默认值,尤其是在面试环境中进行编程时。 假装你有一群学生,你需要记录他们在家庭作业上的成绩。输入值是具有格式(student_name,grade)的元组列表,但是你希望轻松查找单个学生的所有成绩而无需迭代列表。 存储成绩数据的一种方法是使用将学生姓名映射到成绩列表的字典:

>>> student_grades = {}>>> grades = [...     ('elliot', 91),...     ('neelam', 98),...     ('bianca', 81),...     ('elliot', 88),... ]>>> for name, grade in grades:...     if name not in student_grades:...         student_grades[name] = []...     student_grades[name].append(grade)...>>> student_grades{'elliot': [91, 88], 'neelam': [98], 'bianca': [81]}

在这种方法中,你迭代学生并检查他们的名字是否已经是字典中的属性。如果没有,则将它们添加到字典中,并将空列表作为默认值。然后将实际成绩附加到该学生的成绩列表中。但是有一个更简洁的方法,可以使用defaultdict,它扩展了标准的dict功能,允许你设置一个默认值,如果key不存在,它将按默认值操作:

>>> from collections import defaultdict>>> student_grades = defaultdict(list)>>> for name, grade in grades:...     student_grades[name].append(grade)

在这种情况下,你将创建一个defaultdict,它使用不带参数的list构造函数作为默认方法。没有参数的list返回一个空列表,因此如果名称不存在则defaultdict调用list(),然后再把学生成绩添加上。如果你想更炫一点,你也可以使用lambda函数作为值来返回任意常量。利用defaultdict可以使代码更简洁,因为你不必担心key的默认值。相反,你可以在defaultdict里处理它们一次,然后key就终存在了。2. 使用collections.Counter计算Hashable对象假如你有一长串没有标点符号或大写字母的单词,你想要计算每个单词出现的次数。 你可以使用字典或defaultdict增加计数,但collections.Counter提供了一种更清晰,更方便的方法。Counter是dict的子类,它使用0作为任何缺失元素的默认值,并且更容易计算对象的出现次数:

>>> from collections import Counter>>> words = "if there was there was but if \... there was not there was not".split()>>> counts = Counter(words)>>> countsCounter({'if': 2, 'there': 4, 'was': 4, 'not': 2, 'but': 1})

当你将单词列表传递给Counter时,它会存储每个单词以及该单词在列表中出现的次数。如果你好奇两个最常见的词是什么?只需使用.most_common():

>>> counts.most_common(2)[('there', 4), ('was', 4)]

.most-common()是一个方便的方法,只需按计数返回n个最频繁的输入。3. 使用字符串常量访问公共字符串组现在有一个琐事需要判断!‘A’>‘a’是真是假?这是假的,因为A的ASCII代码是65,但a是97,65不大于97。为什么答案很重要?因为如果你想检查一个字符是否是英语字母表的一部分,一种流行的方法是看它是否在A和Z之间(在ASCII图表上是65和122)。检查ascii代码是可行的,但是在面试时却很笨拙,很容易弄乱,特别是当你记不清是小写还是大写的ascii字符排在第一位的时候。这时候,使用定义在字符串模块中的常量要容易得多。你可以使用is_upper(),它返回字符串中的所有字符是否都是大写字母:

>>> import string>>> def is_upper(word):...     for letter in word:...         if letter not in string.ascii_uppercase:...             return False...     return True...>>> is_upper('Thanks Geir')False>>> is_upper('LOL')True

is_upper()迭代word中的字母,并检查字母是否为string.ascii_大写字母的一部分。如果你打印出string.ascii_大写,你会发现它只是一个字符串,该值设置为文本“ABCDEFGHIJKLMNOPQRSTUVWXYZ”。所有字符串常量都只是经常引用的字符串值的字符串。其中包括以下内容:

  • string.ascii_letters

  • string.ascii_uppercase

  • string.ascii_lowercase

  • string.digits

  • string.hexdigits

  • string.octdigits

  • string.punctuation

  • string.printable

  • string.whitespace

这些更容易使用,更重要的是,更容易阅读。4. 使用Itertools生成排列和组合面试官喜欢给出真实生活的场景,让面试看起来不那么吓人,所以这里有一个人为的例子:你去游乐园,决定找出每一对可能坐在过山车上的朋友。除非生成这些配对是面试问题的主要目的,否则很可能生成所有可能的配对只是朝着工作算法前进的一个乏味的步骤。你可以自己用嵌套for循环计算它们,也可以使用强大的itertools库。itertools有多个工具来生成可重复输入数据序列,但现在我们只关注两个常见函数:itertools.permutations()和itertools.combinations()。itertools.permutations()构建所有排列的列表,这意味着它是输入值的每个可能分组的列表,其长度与count参数匹配。r关键字参数允许我们指定每个分组中有多少值:

>>> import itertools>>> friends = ['Monique', 'Ashish', 'Devon', 'Bernie']>>> list(itertools.permutations(friends, r=2))[('Monique', 'Ashish'), ('Monique', 'Devon'), ('Monique', 'Bernie'),('Ashish', 'Monique'), ('Ashish', 'Devon'), ('Ashish', 'Bernie'),('Devon', 'Monique'), ('Devon', 'Ashish'), ('Devon', 'Bernie'),('Bernie', 'Monique'), ('Bernie', 'Ashish'), ('Bernie', 'Devon')]

对于排列,元素的顺序很重要,因此(“sam”、“devon”)表示与(“devon”、“sam”)不同的配对,这意味着它们都将包含在列表中。itertools.combinations()生成组合。这些也是输入值的可能分组,但现在值的顺序无关紧要。因为(‘sam’、‘devon’)和(‘devon’、‘sam’)代表同一对,所以输出列表中只会包含它们中的一个:

>>> list(itertools.combinations(friends, r=2))[('Monique', 'Ashish'), ('Monique', 'Devon'), ('Monique', 'Bernie'),('Ashish', 'Devon'), ('Ashish', 'Bernie'), ('Devon', 'Bernie')]

由于值的顺序与组合有关,因此同一输入列表的组合比排列少。同样,因为我们将r设置为2,所以每个分组中都有两个名称。.combinations和.permutations只是强大库的一个小例子,但是当你试图快速解决算法问题时,即使这两个函数也非常有用。在下一次面试中,你可以放心地使用一些不太常见但功能更强大的标准特性。从整体上来说,要了解该语言有很多东西,但本文应该为大家提供一个起点,让大家能够更深入地了解该语言,同时在面试时更有效地使用Python。

-END-

往期精彩

Python 四大主流 Web 编程框架

为什么你现在必须迁移到Python 3?

推荐一些能提高生产力的 Python 库

Excel VS Python 谁更适合数据分析?

硬核!30 张图解 HTTP 常见的面试题

10个省时间的 PyCharm 技巧

END

关注【程序IT圈】,更多的Python好文输出

Python代码列主元消去法matlab编程_当面试官要求现场手敲代码,如何体现你对Python的编程能力?...相关推荐

  1. 当面试官要求现场手敲代码,该如何体现你对Python的编程能力?

    文章来源于Python数据科学,作者wLsq 如果你已经通过了招聘人员的电话面试,那么下面正是该展现你代码能力的时候了.无论是练习,作业,还是现场白板面试,这都是你证明自己的代码技巧的时刻. 我们知道 ...

  2. Python代码列主元消去法matlab编程_工业机器人用什么语言编程的?

    曾经有很多小伙伴一直问,工业机器人编程用的是什么语言啊?这次给大家总结一下机器人编程中常用的语言. 1.硬件描述语言(HDLs) 硬件描述语言一般是用来描述电气的编程方式.这些语言对于一些机器人专家来 ...

  3. 学习—吴恩达《机器学习》—手敲代码_准备工作之基于Ubuntu系统的 Anaconda(python环境)搭建

    题记--初听不识曲中意,再听已是曲中人. 序曲 一直以来想找个机会与时间去了解一下机器学习.与此同时,吴恩达博士的名字一直在耳边回响,却不知为何如此响彻.后来,在couresa上看到了吴恩达博士的&l ...

  4. Python新手基础入门教程:如何像面试官展示你的coding能力

    Python新手基础入门教程:如何像面试官展示你的coding能力 作为程序员,我们通常在面试的时候面试官会出一些题来让你解决,作为优秀的程秀员,除了需要具备解决问题的思路以外,代码的质量也很关键.因 ...

  5. python 实数如何取整_从面试官角度提问:15道硬核Python面试题,论面霸是如何炼成的...

    见过面试题也不少了,总之了一句话:面试前备好功课,面试中临危不乱,面试后谦虚有礼!这只是我本人总结的一些面试三要素,需要的可以参考参考,话不多了,今天为大家找了比较硬核的15道面试题,希望能够对各位有 ...

  6. qt 如何 指针 自动 释放内存_要是面试官再问你智能指针的问题,就拿这篇文章“盘他”!!!...

    前一段时间,有不少朋友问我关于智能指针的问题,并且反映经常会在面试中被面试官问到,所以今天小豆君就来讲讲我对智能指针的理解,希望能对大家有所帮助 既然讲智能指针,我们就先来看看它为什么会出现. 1 传 ...

  7. 面试官:来写个代码求一下两个数的最大公约数吧

    最近去面试了,面了几家公司,深刻认识到一个道理,越是基础的问题越重要,越能考察一个人的技术功底与逻辑思维.比如我们接下来要说的求两个数的最大公约数的问题.这类简单的算法题目一般会出现在面试环节,面试官 ...

  8. 程序语言中花括号写法——手写or手敲代码

    前言 在手写一本编程参考书的程序代码的时候,突然发现,花括号写法可以适当变一变嘛! 正文 在草稿纸上手写代码的时候,花括号可以这样写 if (name == "niubi") {/ ...

  9. 程序员多数性功能不行_从面试官角度观察到的程序员技能瓶颈,同时给出突破瓶颈的建议...

    我在做技术面试官的时候,面试对象大多数是初级开发和高级开发,偶尔也会面试架构师.我发现,IT人的工资固然和相关技术的使用年限有关,但如果候选人的技能无法跨越到更高层次的话,他们的收入也就会停留在当前级 ...

最新文章

  1. 汇编语言程序设计 实验九
  2. 经济参考报:想哭病毒为中国网络安全敲警钟
  3. python中文名字-完美解决Python2操作中文名文件乱码的问题
  4. OpenCV 升降维度
  5. 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)
  6. [architecture]-armv8-aarch64种的SIMD/FP指令介绍
  7. Angular 路由时如何在 Component 之间传递参数
  8. 3.0 go mod之远程仓库搭建-代码示例
  9. C++:new[]和delete[]一定要配对使用吗?
  10. mysql查询索引相关信息查询
  11. 使用Levmar的L-M算法拟合曲线
  12. java中factory_Java后台面试--Spring中FactoryBean与BeanFactory的使用及区别
  13. Qt4_快速设计对话框
  14. Leetcode 100.相同的树
  15. HTML5 postMessage解决跨域|跨窗口通信
  16. Anaconda3创建、删除虚拟环境(win10)
  17. 反射认识_03_改变成员变量Fields
  18. c 易语言置入代码6,易语言置入代码.doc
  19. onlyoffice源码编译环境搭建破解
  20. 防火墙的三种工作模式介绍(路由模式、透明模式(网桥)、混合模式)

热门文章

  1. 计算机网络之面试常考
  2. 京东android面试题2019,2019京东的面试题(牛客)
  3. vr体验心得_在我们新的VR学习体验中逃脱女巫的小屋
  4. 蓝桥杯-基础练习-特殊回文数
  5. 崩坏3区号+86_86的区号是代表中国!那82是代表哪个国家?
  6. 算法训练:嘘,别人我不告诉TA
  7. 北京的房租到底有多高?
  8. 《掌舵》-还原一个真实的政商圈
  9. Android 4.0 源代码结构
  10. 超微服务器主板ipmi证书,超微服务器主板ipmi怎样恢复出厂设置