首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

可以大体看出你C语言水平十道题,挑战一下?

在程序结束后,所有这个程序分配内存都会自动被处理掉。但如果上面的代码处于一个while循环”中,那将会导致严重内存泄漏问题!...,代码会(通过增加“ptr”)修改while循环里“ptr”存储地址。...当输入“zebra”时,while循环会在执行前被终止,因此传给free()变量就是传给malloc()地址。...答:如下: int func(void *ptr) 如果这个函数参数超过一个,那么这个函数应该由一个结构体来调用这个结构体可以由需要传递参数来填充。 7.*和++操作 问:下面的操作会输出什么?...这个操作是无效,因此会造成seg-fault或者崩溃。 9.返回本地变量地址 问:下面代码问题?如果有,该怎么修改?

45410

程序员深夜惨遭老婆鄙视,原因竟是CAS原理太简单?| 每一张图都力求精美

在画CAS原理,要不跟你讲一遍? 老婆:好呀! 案例:甲看见一个三角形积木,觉得不好看,替换成五边形,但是乙想把积木替换成四边形。(前提条件,只能被替换一次) ?...调用UnSafe类中CAS方法,JVM会帮我们实现出CAS汇编指令,这是一种完全依赖于硬件功能,通过它实现了原子操作。...四、CAS什么问题? 不知道大家发现没,aaa线程可能会出现循环多次问题,因为其他线程可能将主内存值又改了,但是aaa线程拿到还是老数据,就会出现再循环一次,就会给CPU带来性能开销。...频繁出现自旋,循环时间长,开销大(因为执行是do while,如果比较不成功一直在循环,最差情况,就是某个线程一直取到值和预期值都不一样,这样就会无限循环) 只能保证一个共享变量原子操作 当对一个共享变量执行操作时...,我们可以通过循环CAS方式来保证原子操作 但是对于多个共享变量操作时,循环CAS就无法保证操作原子性,这个时候只能用锁来保证原子性 引出来ABA问题(彩蛋) 五、小结 本篇从和老婆对话开始,以通俗语言给老婆讲了

59651
您找到你想要的搜索结果了吗?
是的
没有找到

Random在高并发下缺陷以及JUC对其优化

虽然英语只停留“点头yes,摇头no,来是come,去是go” 水平,但是知道next是“下一个意思,如果来命名,会命名为“create”,“generate”,这样不是更“贴切”?...现在让我们一个问题,如果在高并发情况下,N个线程,同时执行到第一步:根据老种子生成新种子,获得种子不就一样了吗?由于第二步是根据新种子来计算随机数,这个算法又是固定,会产生什么情况?...当两个线程同时进入到next方法,会发生如下事情: 线程A,线程B同时拿到了seed值,赋值给oldseed变量。 根据一个神秘算法,计算出nextseed为XXX。...大量线程都在进行while循环这是相当占用CPU,所以JUC推出了ThreadLocalRandom来解决这个问题。...,所以多次调用此方法,返回ThreadLocalRandom对象是同一个

87430

笨办法学 Java(二)

练习 27:一个猜数字游戏 现在你知道如何使用while循环重复某些内容,我们将编写一个实际上另一个可能会喜欢运行程序?你对此和我一样兴奋?...如果我们用while循环来做这个,条件会是这样while ( again.equals("y") ) { 这是可以,也可以工作,但是变量again直到第 28 行才得到一个值。...或者可能是三个,可能是五个,不确定?那么你需要另一种方法。你需要一个循环(这就是我们重复事情方式),并且你需要一个变量,它将随着值逐个添加而逐渐增加。...一个从“空白”开始并逐个添加值变量称为“累加器”变量,尽管这是一个相当古老词,所以如果你编程朋友年龄不到四十岁,他们可能从未听说过。...在名称(或“标识符”)showDice 后面,一组括号,在它们之间声明了一个变量这个变量叫做“参数”。showDice 函数一个参数。这个参数是一个整数。它名字叫 roll。

11810

一个困扰122天技术问题,好像知道答案了。

来,你说这个程序会不会正常结束? ? 但凡是对 Java 并发编程一定基础朋友都能看出来,这个程序是一个循环。...甚至让你觉得:不可能吧?得亲自操作一下。 操作之后你就会说:卧槽,还真是这样?这是量子力学? ? 第一次程序改造 那我把上面这题变一下,改变成下面这样: ?...这次变动点是在 while 循环里面加了一个 100ms 睡眠。 来,你再猜一下。这个程序还是不是死循环呢?...(所以同步操作) 因此,如果使用 System.out.println, JVM 将无法在循环期间缓存变量。 这就是为什么,当 print 语句时,循环可以正常结束,尽管这不是一个正确操作。...这时候 CPU 就可能有时间去保证内存可见性,于是 while 循环可以被终止。 (别说锁粗化了,觉得这个回答肯定是不对。)

89610

Random在高并发下缺陷以及JUC对其优化

虽然英语只停留“点头yes,摇头no,来是come,去是go” 水平,但是知道next是“下一个意思,如果来命名,会命名为“create”,“generate”,这样不是更“贴切”?...现在让我们一个问题,如果在高并发情况下,N个线程,同时执行到第一步:根据老种子生成新种子,获得种子不就一样了吗?由于第二步是根据新种子来计算随机数,这个算法又是固定,会产生什么情况?...当两个线程同时进入到next方法,会发生如下事情: 线程A,线程B同时拿到了seed值,赋值给oldseed变量。 根据一个神秘算法,计算出nextseed为XXX。...大量线程都在进行while循环这是相当占用CPU,所以JUC推出了ThreadLocalRandom来解决这个问题。...(Thread.currentThread(), PROBE) == 0) localInit(); return instance; } 一点需要注意,由于current是一个静态方法,所以多次调用此方法

48930

Java反射进阶—聊聊反射几个问题

前言 昨天朋友反映好多反射知识没说到,所以今天算是补充篇,一起看看反射进阶知识点。 反射可以修改final类型成员变量? final我们应该都知道,修饰变量时候代表是一个常量,不可修改。...这是为什么呢?为什么String不能被修改,而普通对象变量可以被修改呢? 先说结论,其实String值也被修改了,只是我们无法通过这个对象获取到修改后值。...怎么提升反射效率 1、缓存重复用到对象 利用缓存,其实不说大家也都知道,在平时项目中用到多次对象也会进行缓存,谁也不会多次去创建。...ASM是一个通用Java字节码操作和分析框架。它可以用于修改现有类或直接以二进制形式动态生成类。 简单说,这是一个类似反射,但是不同于反射高性能库。...「小总结:」经过上述三种方法,反射也不会那么可怕到大大影响性能程度了,如果真的发现反射影响了性能以及实际使用情况,也许可以研究下,是否是因为没用对反射和没有处理好反射相关缓存呢?

1K30

Java初学者30个常见问题

当 a b 都是基本类型变量时,a += b 和 a = a + b 效果有区别? A. 当 a 和 b 类型不同时,那两条语句效果就可能有区别。...但是第二种写法更好,因为它限制了变量作用域。 2.1 函数调用 Q. 当把数组当作函数调用参数时,常常感到疑惑? A. 是的。...因为这个原因,绝大多数变成语言支持把数组传入函数但不复制一个副本——MATLAB语言除外。 2.3 递归调用 Q. 有没有只能用循环而不能用递归情况? A....不可能,所有的循环都可以用递归替代,虽然大多数情况下,递归需要额外内存。 Q. 有没有只能用递归而不能用循环情况? A. 不肯能,所有的递归调用都可以用循环来表示。...JAVA对于栈实现就是一个典型宽接口例子。 Q. 使用数组来表示一个包含泛型栈,但是以下代码编译报错。为什么? A. 不错尝试。不幸是,创建一个泛型数组在 Java 1.5里不支持。

1.7K51

笨办法学 Java(三)

(就像两个名叫“迈克尔”朋友。只是因为他们相同名字并不意味着他们是同一个人。) 变量b(在第 27 行定义)值作为函数调用中参数base初始值传入。...这是因为它试图从一个名为name-and-numbers.txt文本文件中读取,这个文件必须与你代码在同一个文件夹中。你可能没有这样文件!...用您惊人幸运连胜给朋友留下深刻印象! 练习 44:使用 for 循环计数 正如您在以前练习中看到while循环和 do-while 循环可以用来多次执行某些操作。...第二部分(n <= 5)是一个条件,就像while或 do-while 循环条件一样。for循环一个前测试循环,就像while循环一样,这意味着在循环开始之前会测试这个条件。...大多数学生希望通过在循环内部放置另一个if语句(或else)来解决这个问题,以表明“未找到”。但这是行不通。如果想知道是否找到了某物,那么一旦找到它,就可以这样说。

14110

12个很好玩C语言面试题,不来测试下嘛?

1.gets()函数 问:请找出下面代码里问题: ? 答:上面代码里问题在于函数gets()使用, 这个函数从stdin接收一个字符串而不检查它所复制缓存容积, 这可能会导致缓存溢出。...但如果上面的代码处于一个while循环”中,那将会导致严重内存泄漏问题! 提示:如果你想知道更多关于内存泄漏知识和内存泄漏检测工具,可以来看看我们在Valgrind上文章。...当输入“zebra”时,while循环会在执行前被终止,因此传给free()变量就是传给malloc()地址。...答:如下: ‍‍int func(void *ptr) ‍‍‍‍ 如果这个函数参数超过一个,那么这个函数应该由一个结构体来调用这个结构体可以由需要传递参数来填充。 8....11.返回本地变量地址 问:下面代码问题?如果有,该怎么修改? ? 答:尽管上面的程序有时候能够正常运行,但是在“inc()”中存在严重漏洞。这个函数返回本地变量地址。

1.1K3130

猿进化系列3——看完这个,你就有好几根猴毛了!

再来考考你,在程序中有一个变量a,当a值为1时输出“是第1行”,当a值为2时输出“是第2行”,当a值为3时输出“是第3行”,已此类推,一直到第5行! 不要低估了智商!看我! ?...小伙儿,我们来玩耍一个游戏——输出10000行,“猿人工厂,我爱你” 猿人工厂君,你—— 机智如我怎么可能被难倒?...表达式3:给初循环变量做增量或者减量,以达到控制循环体执行次数目的。 下面给出一个例子,计算从1到100整数和。 ? 循环语句2--while 100以内整数和还可以这样写 ?...所谓方法,就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独功能。 当我们需要这个功能时候,就可以去调用。这样即实现了代码复用性,也解决了代码冗余现象。 方法定义 ?...我们看下面这个例子:计算长方形面积 ? 那怎么调用呢? ? 那如果保留计算结果,被其它地方使用怎么办? ?

55620

迭代器和生成器

它缺少某些被认为是其他语言不可或缺组成部分结构,例如广泛标准库、不变性和宏。但在我看来,一个细节没有得到足够重视——发电机。...在本文中,解释迭代器和生成器可能用例,以及它们如何改进代码冗长性。...在下一次next调用中,传递给函数值将设置reset变量值。但是第一次next调用中传递值会发生什么变化?它无处可去!如果需要将初始值传递给生成器,可以通过生成器参数来实现。...此外,我们还了解了生成器,这是一种方便地实现迭代器语法结构。 尽管在本文中,提供了带有数字序列示例,但 JavaScript 中迭代器可以解决范围广泛任务。...在下一篇文章中,讨论如何使用生成器来构建异步进程(协同程序、goroutines、CSP 等)。

13520

使用C# (.NET Core) 实现单体设计模式 (Singleton Pattern)

B: new MyObject() A: 如果创建另一个对象, 就再次new MyObject()? B: 是的 A: 所以说我们某个类, 我们就可以对它实例化很多次?...这是个鸡和蛋问题: 可以使用MyClass里面的构造函数, 但是无法实例化这个对象, 因为其他类无法使用 "new MyClass()"....类图: 其他问题 上面巧克力锅炉那道题你可能写好了, 但是可能会出现这个问题: 锅炉可能在里面有液体情况下又进行了fill填充动作. 这是怎么回事? 是不是其他线程引起这个问题?...我们可能有两个线程都在执行这段代码: image.png 那么两个线程调用时是否重叠, 代码执行是否交错? ...所以如果性能是问题, 就可以使用这个方法. 其他问题 Q: 如果创建一个类, 里面都是静态方法和静态变量, 那么它效果和单体模式不是一样?

92540

喜提JDKBUG一枚!多线程情况下请谨慎使用这个stream遍历。

先说结论:LinkedBlockingQueue stream 遍历方式,在多线程下是一定问题可能会出现死循环。 老有意思了,这篇文章带大家盘一盘。...点过去看一眼 JDK 8 tryAdvance 方法,果不其然,里面有一个 while 循环: 从 while 条件上看是 current 节点一直不是 null,所以跳不出这个循环。...h.next=h 也就是前面画这个图: 那么 dequeue 方法这个地方和 tryAdvance 方法里面的 while 循环会发生一个什么样神奇事情呢?...现在,一个问题问你:ConcurrentHashMap 是线程安全之前写过,这玩意在 JDK8 下也是循环《震惊!...道理,就是这么一个道理。 最后,再说一次结论:LinkedBlockingQueue stream 遍历方式,在多线程下是一定问题可能会出现死循环。 好了,那本文技术部分就到这里啦。

40310

使用 C#.NET Core 实现单体设计模式

B: new MyObject() A: 如果创建另一个对象, 就再次new MyObject()? B: 是的 A: 所以说我们某个类, 我们就可以对它实例化很多次?...这是个鸡和蛋问题: 可以使用MyClass里面的构造函数, 但是无法实例化这个对象, 因为其他类无法使用 "new MyClass()"....其他问题 上面巧克力锅炉那道题你可能写好了, 但是可能会出现这个问题: 锅炉可能在里面有液体情况下又进行了fill填充动作. 这是怎么回事? 是不是其他线程引起这个问题?...我们可能有两个线程都在执行这段代码: ? 那么两个线程调用时是否重叠, 代码执行是否交错?  请看下图: ?...所以如果性能是问题, 就可以使用这个方法. 其他问题 Q: 如果创建一个类, 里面都是静态方法和静态变量, 那么它效果和单体模式不是一样?

65760

2.Python入门到精通

改进我们小游戏 概以下几个方面需要改进: 猜错时候程序应该给点提示,例如告诉用户输入值是大了还是小了。 每运行一次程序只能猜一次,应该提供多次机会给用户猜测。 每次运行程序,答案可以是随机。...=左边不等于右边 Python条件分支语法: if 条件 :  条件为真(True)执行操作 else:  条件为假(False)执行操作 while循环 第二个改进要求:程序应该提供多次机会给用户猜测...请用红笔圈出你认为需要进行循环代码: print('------------------------------------') temp = input("不妨猜一下现在心里是哪个数字:")...==8: temp=input("猜错了,请重新输入:") guess=int(temp) if guess == 8:     print("草,你是心里蛔虫?!")    ...我们需要引入外援:random模块 这个random模块里边一个函数叫做:randint(),Ta会返回一个随机整数。 我们可以利用这个函数来改造我们游戏!

40710

经典C面试题

gets()使用,这个函数从stdin接收一个字符串而不检查它所复制缓存容积,这可能会导致缓存溢出。...作者注:近期编译器会在内部检測栈溢出可能,所以这样往栈里存储变量非常难出现栈溢出。在gcc里默认就是这样,所以我不得不使用编译命令‘-fno-stack-protector’来实现上述方案。...在程序结束后,全部这个程序分配内存都会自己主动被处理掉。但假设上面的代码处于一个while循环”中,那将会导致严重内存泄漏问题!...当输入“zebra”时,while循环会在运行前被终止,因此传给free()变量就是传给malloc()地址。...答:例如以下: int func(void *ptr) 假设这个函数參数超过一个,那么这个函数应该由一个结构体来调用这个结构体能够由须要传递參数来填充。 8.

67710
领券