• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

OCP JAVA SE 17 DEVELOPER PRACTICE TESTS - Streams reduce operation

 
Greenhorn
Posts: 6
  • Number of slices to send:
    Optional 'thank-you' note:
Hi,

While doing the practice tests I have run into a couple of questions so far for which I do not agree with their solutions: Chapter 6 Question 34 option B; and Chapter 6 Question 41 option B.

For both questions to seem to be ok the parallel execution plan for the accumulation operation must satisfy that all threads are run on single-element chunks throughout the entire stream which, I must admit, seems to be the case when I have tested them as they are without introducing any change. As far as I know, there is no such warranty made by the Java Language Specification and in any case would be incoherent to do so because the serial execution model would yield a different result. Therefore, I take for granted that it is just a coincidence that at least they may seem to work fine because the two streams are pretty small, much smaller than the thread pool.

Anyway, if we look at the following test cases for Q.34 and option B it seems quite easy to figure out that the reduction operation can be solved by applying N * 5 where N is the length of the stream. That is exactly what we expect to see if the accumulator function has been applied one by one so that we end up combining as many intermediate results as elements are in the stream. The accumulator function would behave just as a transformation function which ignores any previous result.



The first setback is that it is not coherent with the serial execution model as the next test case shows.



The second setback is that it is not consistent either once the parallelism threshold is exceeded as the next test case shows.



I also guess all these outputs depend on what JVM runtime implementation is used by the way.

The reduce method we are using states that the following condition must hold true for any accumulated 'u' value and stream element 't':

  combiner.apply(u, accumulator.apply(identity, t)) == accumulator.apply(u, t)

In this case we have that:

  identity = 0
  accumulator = (a, b) -> K
  combiner = (a, b) -> a + b

Then if we replace we get:

  u + K = K

Of course this condition can only be true for any u when K = 0, and in turn, will make that u = 0 as well because 0 + 0 = 0. But in option B it happens that K = 5.
 
Saloon Keeper
Posts: 15625
366
  • Number of slices to send:
    Optional 'thank-you' note:
It would help if you could quote the question, and the answer that you disagree with.
 
Cristian Uceda Garrido
Greenhorn
Posts: 6
  • Number of slices to send:
    Optional 'thank-you' note:

34. Given the following code snippet, which lambda expressions are the best choices for an accumulator? (Choose two)



A. (a, b) -> (a - b)
B. (a, b) -> 5
C. (a, b) -> i++
D. (a, b) -> {words.add("awesome"); return 0;}
E. (a, b) -> {return 0;}
F. (a, b) -> words.add("awesome")



Solution is B,E.
I think it should be D,E.
 
Stephan van Hulst
Saloon Keeper
Posts: 15625
366
  • 1
  • Number of slices to send:
    Optional 'thank-you' note:
I agree with you that B is false, because that accumulator is not compatible with the combiner.

I do not agree that D is true. While it's not forbidden that the accumulator has side-effects, it's strongly discouraged. I do think that D is a better choice than B.

In my opinion, the only good accumulator is E, so there's definitely something wrong with the question.
 
Cristian Uceda Garrido
Greenhorn
Posts: 6
  • Number of slices to send:
    Optional 'thank-you' note:
I do not know if someone is going to fix these mistakes, but Question 69 has the same issue.
 
author & internet detective
Posts: 41914
910
  • Number of slices to send:
    Optional 'thank-you' note:
For #34, I agree with Stephan that D is definitely wrong. In fact, all but B and E are terrible answers.

I made a note to see if we want to do anything about any of this in the next book. It's hard to come up with realistic parallelization examples in ways in small blocks of code.
 
Cristian Uceda Garrido
Greenhorn
Posts: 6
  • Number of slices to send:
    Optional 'thank-you' note:

Jeanne Boyarsky wrote:For #34, I agree with Stephan that D is definitely wrong. In fact, all but B and E are terrible answers.

I made a note to see if we want to do anything about any of this in the next book. It's hard to come up with realistic parallelization examples in ways in small blocks of code.



Cannot agree on that. B is much worse than D. A neutral side effect, even though discouraged, is still neutral. B does not follow method contract. It's really harmful.
 
reply
    Bookmark Topic Watch Topic
  • New Topic
vceplus-200-125    | boson-200-125    | training-cissp    | actualtests-cissp    | techexams-cissp    | gratisexams-300-075    | pearsonitcertification-210-260    | examsboost-210-260    | examsforall-210-260    | dumps4free-210-260    | reddit-210-260    | cisexams-352-001    | itexamfox-352-001    | passguaranteed-352-001    | passeasily-352-001    | freeccnastudyguide-200-120    | gocertify-200-120    | passcerty-200-120    | certifyguide-70-980    | dumpscollection-70-980    | examcollection-70-534    | cbtnuggets-210-065    | examfiles-400-051    | passitdump-400-051    | pearsonitcertification-70-462    | anderseide-70-347    | thomas-70-533    | research-1V0-605    | topix-102-400    | certdepot-EX200    | pearsonit-640-916    | itproguru-70-533    | reddit-100-105    | channel9-70-346    | anderseide-70-346    | theiia-IIA-CIA-PART3    | certificationHP-hp0-s41    | pearsonitcertification-640-916    | anderMicrosoft-70-534    | cathMicrosoft-70-462    | examcollection-cca-500    | techexams-gcih    | mslearn-70-346    | measureup-70-486    | pass4sure-hp0-s41    | iiba-640-916    | itsecurity-sscp    | cbtnuggets-300-320    | blogged-70-486    | pass4sure-IIA-CIA-PART1    | cbtnuggets-100-101    | developerhandbook-70-486    | lpicisco-101    | mylearn-1V0-605    | tomsitpro-cism    | gnosis-101    | channel9Mic-70-534    | ipass-IIA-CIA-PART1    | forcerts-70-417    | tests-sy0-401    | ipasstheciaexam-IIA-CIA-PART3    | mostcisco-300-135    | buildazure-70-533    | cloudera-cca-500    | pdf4cert-2v0-621    | f5cisco-101    | gocertify-1z0-062    | quora-640-916    | micrcosoft-70-480    | brain2pass-70-417    | examcompass-sy0-401    | global-EX200    | iassc-ICGB    | vceplus-300-115    | quizlet-810-403    | cbtnuggets-70-697    | educationOracle-1Z0-434    | channel9-70-534    | officialcerts-400-051    | examsboost-IIA-CIA-PART1    | networktut-300-135    | teststarter-300-206    | pluralsight-70-486    | coding-70-486    | freeccna-100-101    | digitaltut-300-101    | iiba-CBAP    | virtuallymikebrown-640-916    | isaca-cism    | whizlabs-pmp    | techexams-70-980    | ciscopress-300-115    | techtarget-cism    | pearsonitcertification-300-070    | testking-2v0-621    | isacaNew-cism    | simplilearn-pmi-rmp    | simplilearn-pmp    | educationOracle-1z0-809    | education-1z0-809    | teachertube-1Z0-434    | villanovau-CBAP    | quora-300-206    | certifyguide-300-208    | cbtnuggets-100-105    | flydumps-70-417    | gratisexams-1V0-605    | ituonline-1z0-062    | techexams-cas-002    | simplilearn-70-534    | pluralsight-70-697    | theiia-IIA-CIA-PART1    | itexamtips-400-051    | pearsonitcertification-EX200    | pluralsight-70-480    | learn-hp0-s42    | giac-gpen    | mindhub-102-400    | coursesmsu-CBAP    | examsforall-2v0-621    | developerhandbook-70-487    | root-EX200    | coderanch-1z0-809    | getfreedumps-1z0-062    | comptia-cas-002    | quora-1z0-809    | boson-300-135    | killtest-2v0-621    | learncia-IIA-CIA-PART3    | computer-gcih    | universitycloudera-cca-500    | itexamrun-70-410    | certificationHPv2-hp0-s41    | certskills-100-105    | skipitnow-70-417    | gocertify-sy0-401    | prep4sure-70-417    | simplilearn-cisa    |
http://www.pmsas.pr.gov.br/wp-content/    | http://www.pmsas.pr.gov.br/wp-content/    |