What are effective ways to prepare students for the AP CS Principles Exam?
Personal disclaimer: the best preparation for the exam is first to ensure that students master course content. If you have an AP CSP-aligned curriculum, then every day is a day of exam preparation. This touches on the biggest struggle I felt as a first-year AP teacher: am I teaching them computer science, or am I preparing them for a computer science exam? The ideal situation for me -- and the personal resolution I reached -- is that quality instruction, assessment and feedback, and student engagement with a rigorous curriculum (CS50 AP in my case) are the key elements to focus on for ensuring student success on the AP Exam. 

That said, I did utilize a number of resources throughout the year:


The full-length sample exam provided through AP Course Audit (a secure document)
The 22 sample questions from the course description
The prep book Fast Track to a 5
The online paid resource Albert.io


I'll enumerate how I used each of them and for simplicity refer to them by the number listed above. 

I pulled questions from #1 throughout the year. The first unit covered a basic intro to binary, so as a short formative assessment, I gave students the four sample questions they could answer having studied the basics of base systems. This was within the first two weeks, so right away we could talk about exam-style questions, specifically the ones that required selecting two right answers. I used sample questions a few more times during the first semester, but I didn't make it a priority (see disclaimer above). However, on the last day of class in the fall, I gave students a modified exam. We had studied three of the six Big Ideas tested on the multiple-choice exam in depth, so I selected questions equivalent to half the exam (enough for the allotted time and perfect for matching the pace of the real exam) and surprised them with this practice exam. There was no warning; students just had to trust what they had learned up to that point. We started the second semester going over this exam. I did an item analysis over break, so I could hone in on strengths and weaknesses and address them in the spring. 

In the second semester, I started to use #3 at certain sporadic moments. Since The Internet is arguably the most fact-driven of the Big Ideas, I used it as a resource for designing an exam on my Internet unit. Students were encouraged to buy it, but it was not a requirement. So much time in the second semester is taken up by Explore and Create that the multiple choice test is a lower priority until after spring break. Based on this year's Easter timing and AP schedule, I had two weeks of classes to devote strictly to exam preparation. This amount of time was more than adequate to build students' confidence and familiarity with the exam format.

During these final two weeks of prep, I went through each question from #2, discussing how each Big Idea could be assessed. As a class we went through each Big Idea on the exam and connected the learning objectives to potential exam questions. The sample questions were great talking points for reviewing course content. I also gave an in-class exam using all the questions from #1 that didn't make it on the first practice exam. I paced it such that students had the same time/question that they would have on the exam. I wanted to make sure students had seen every official practice question and had the opportunity to ask about each one, especially the ones from the secure document that they couldn't take out of the classroom. 

The last big exam review I did was an optional exam review the Saturday before the exam. I had >50% attendance, and by the end the students felt more than prepared for the exam, and I felt confident I had done enough to get them ready for it. That day (and the following week) I made heavy use from #3 and #4. We basically went Big Idea by Big Idea, gaining more practice and focusing on particular tips and tricks for each. In particular, we went through a number of the robot questions and those questions that required analyzing segments of code. 

At the end of the course, I asked students how prepared the felt for the multiple choice. To a person they said that we had done ample review and that they felt confident in how they had done. (Now I will know more about specific students later this week when the scores come out for teachers, but I do value this piece of student feedback.)

Bottom line: trust the quality of your instruction and your curriculum. Extra resources are nice, but the College Board's official practice is sufficient for getting students ready. A little exposure in the first semester and a week or two of focused multiple-choice review is plenty. Given that students will also prepare for the exam in the work they do for Explore and Create, they will be plenty prepared by course end. Also, the more students read, write, and understand code on whatever language you use, the stronger they will be come exam time; there is no substitute for this.