Pelajaran 1Memilih strategi pelanggaran untuk konteks statik: penjanaan terbuka vs rantaian berasingan statik dengan arrayMembandingkan penjanaan terbuka dan rantaian berasingan statik untuk sistem memori tetap, menganalisis tingkah laku cache, pecahan, kerumitan pelaksanaan, dan garis panduan untuk memilih strategi pelanggaran dalam projek C tertanam.
Semakan sifat penjanaan terbukaSemakan rantaian berasingan statikSusun atur memori dan kesesuaian cacheKerumitan dan usaha pelaksanaanGaris panduan pemilihan strategiPelajaran 2Kerumitan memori dan masa: mendokumentasikan sonde terburuk dan dijangka, cadangan faktor beban jadual untuk tertanamMenganalisis kerumitan memori dan masa jadual hash statik, mendokumentasikan bilangan sonde kes terburuk dan dijangka, had faktor beban, dan cadangan saiz praktikal yang disesuaikan untuk aplikasi senser tertanam.
Analisis panjang sonde kes terburukSonde dijangka di bawah hashing rawakKesan faktor beban pada prestasiJejak memori dan saiz jadualGaris panduan penalaan khusus tertanamPelajaran 3Pengendalian penunjuk selamat: menggunakan indeks bukannya penunjuk, pemeriksaan had, dan mengelakkan dereferens NULLMeliputi pengendalian penunjuk selamat dalam jadual hash statik dengan menggunakan indeks bukannya penunjuk mentah, menguatkuasa pemeriksaan had, dan mereka bentuk API yang mencegah dereferens NULL dan rujukan tergantung dalam kod C.
Indeks vs penunjuk dalam jadual statikMelaksanakan pemeriksaan had yang teguhMengelakkan rujukan NULL dan tergantungMenukar indeks kepada penunjuk dengan selamatCorak API yang menguatkuasa keselamatanPelajaran 4Teknik penjanaan terbuka: sonde linear, sonde kuadratik, batu nisan, dan semantik pemadaman tanpa memori dinamikTerperinci penjanaan terbuka dalam jadual statik, termasuk sonde linear dan kuadratik, penanda batu nisan, dan peraturan pemadaman yang mengelakkan perkongsian dinamik sambil memelihara rantaian sonde dan prestasi yang boleh diramal dalam pelaksanaan C.
Sonde linear: algoritma dan pertimbanganSonde kuadratik: tingkah laku klusterMereka bentuk dan menggunakan penanda batu nisanSemantik pemadaman dan pembaikan rantaian sondeMengesan jadual penuh dan mod kegagalanPelajaran 5Integrasi dengan buffer bulat: mengekalkan bacaan terkini dan dasar untuk konsistensi (urut-tulis, cap masa)Meneroka cara jadual hash statik bekerjasama dengan buffer bulat untuk mengekalkan bacaan senser terkini, tentukan urutan tulis, gunakan cap masa untuk kesegaran, dan kekalkan konsistensi apabila kemas kini atau akses seperti serentak berlaku.
Memetakan ID senser kepada slot buffer bulatMenyimpan hanya bacaan terkini setiap senserMedan cap masa dan urutan monotonikMengendalikan kes overwrite dan wrap-aroundPeraturan konsistensi untuk akses gaya serentakPelajaran 6init_table: menetapkan penanda kosong, menginisialisasi senarai bebas atau batu nisanMenerangkan tanggungjawab init_table, seperti menetapkan penanda kosong, menginisialisasi senarai bebas atau batu nisan, membersihkan metadata, dan memastikan jadual bermula dalam keadaan konsisten dan boleh disahkan sebelum penggunaan pertama.
Memilih dan menetapkan penanda kosongMenginisialisasi batu nisan dan bendera keadaanMembina struktur senarai bebas awalMennull atau menyucikan memori jadualPemeriksaan pengesahan selepas inisialisasiPelajaran 7insert_or_update_reading: sisip, kemas kini, mengendalikan jadual penuh, dan kod pulanganMenerangkan API insert_or_update_reading, termasuk penyisipan, kemas kini in-place, mengendalikan jadual penuh, kod pulangan, dan cara mengintegrasikan pengendalian pelanggaran sambil mengekalkan antara muka yang mudah dan teguh dalam C.
Prototip fungsi dan pilihan parameterLaluan sisip untuk ID senser baruLaluan kemas kini untuk ID senser sedia adaMengendalikan jadual penuh dan pulangan ralatMereka bentuk kod status dan ralat yang jelasPelajaran 8Mereka bentuk array tong: pemilihan saiz jadual, saiz prima, dan pemalar masa kompilasiMenerangkan cara mereka bentuk array tong, termasuk memilih saiz jadual, saiz prima atau kuasa-dua, pemalar masa kompilasi, dan pertimbangan antara penggunaan memori, kelajuan, dan kesederhanaan fungsi hash.
Saiz jadual prima vs kuasa-duaMenghubungkan saiz jadual dengan keupayaan kunciMenggunakan pemalar masa kompilasi dalam CMengimbangi memori dan prestasiMerancang pelarasan saiz masa depanPelajaran 9Rantaian statik dengan array: reka bentuk kolam nod, indeks seterusnya, dan pengurusan senarai bebas dalam memori statikMeliputi rantaian berasingan statik menggunakan array, termasuk susun atur kolam nod, pautan indeks seterusnya, pengurusan senarai bebas, dan cara melaksanakan penyisipan, pemadaman, dan penyusuran tanpa perkongsian heap dalam persekitaran terhad.
Mereka bentuk susun atur array kolam nodMenggunakan indeks seterusnya bukannya penunjukMengurus senarai bebas dalam memori statikPenyisipan dan pemadaman dalam rantaian statikMengesan kepenatanan kolam dan ralatPelajaran 10Perwakilan kunci dan nilai: menggunakan uint8_t id senser dan semantik salinan SensorReadingMenerangkan cara mewakili kunci dan nilai menggunakan ID senser uint8_t dan struct SensorReading, memberi tumpuan kepada semantik salinan, penjajaran, padding, dan mengelakkan masalah aliasing atau jangka hayat dalam jadual hash statik.
Memilih uint8_t untuk kunci ID senserMereka bentuk struct SensorReadingSemantik salinan vs semantik penunjukPenjajaran, padding, dan susun atur structMengesahkan dan menormalkan ID senserPelajaran 11Pilihan fungsi hash untuk ruang kunci kecil: identiti, darab berganda, dan penyamaran untuk id 0–255Membincangkan fungsi hash untuk ruang kunci uint8_t kecil, termasuk pemetaan identiti, hashing darab berganda, penyamaran, dan cara mengimbangi kesederhanaan, kualiti taburan, dan kos pengiraan untuk ID senser 0–255.
Hash identiti untuk julat ID padatHashing darab berganda untuk kunci uint8_tPenyamaran bit dan penerbitan indeks jadualMengelakkan corak kluster sistematikMenguji taburan dengan data sampelPelajaran 12find_reading_by_id: urutan sonde, tindak balas tidak-ditemui vs ditemui, dan corak salin-keluar selamatMemberi tumpuan kepada find_reading_by_id, termasuk urutan sonde, membezakan ditemui daripada tidak ditemui, salinan selamat SensorReading keluar dari jadual, dan mengelakkan tingkah laku tidak ditakrif atau pendedahan data lama dalam C.
Tandatangan fungsi dan corak pulanganMelaksanakan urutan sonde untuk carianMengendalikan hasil tidak-ditemui vs ditemuiSalinan-keluar selamat nilai SensorReadingMengelakkan data lama atau separa ditulis