Is neural networks training done one-by-one?
Should I be changing the weights/biases on every single sample before moving on to the next sample, 


You can do this, it is called stochastic gradient descent (SGD) and typically you will shuffle the dataset before working through it each time.


  or should I first calculate the desired changes for the entire lot of 1,000 samples, and only then start applying them to the network?


You can do this, it is called batch gradient descent, or in some cases (especially in older resources) just assumed as the normal approach and called gradient descent.

Each approach offers advantages and disadvantages. In general:


SGD makes each update sooner in terms of amount of data that has been processed. So you may need less epochs before converging on reasonable values.
SGD does more processing per sample (because it updates more frequently), so is also slower in the sense that it will take longer to process each sample. 
SGD can take less advantage of parallelisation, as the update steps mean you have to run each data item serially (as the weights have changed and error/gradient results are calculated for a specific set of weights).
SGD individual steps make typically only very rough guesses at the correct gradients to change weights in. This is both a disadvantage (performance of the NN against the objective on the training set can decrease as well as increase) and an advantage (there is less likelihood of getting stuck in a local stationary point due the "jitter" these random differences cause).


What happens in practice is that most software allows you to compromise between batch processing and single-sample processing, to try and get the best performance and update characteristics. This is called mini-batch processing, which involves:


Shuffling the dataset at the start of each epoch.
Working through the shuffled data, N items per time where N might vary from maybe 10 to 1000, depending on the problem and any constraints on the hardware. A common decision is to process the largest batch size that the GPU acceleration allows to run in parallel.
Calculate the update required for each small batch, then apply it.


This is nowadays the most common update method that most neural network libraries assume, and they almost universally will accept a batch size parameter in the training API. Most of the libraries will still call simple optimisers that do that SGD; technically it is true, the gradients calculated are still somewhat randomised due to not using the full batch, but you may find this called mini-batch gradient descent in some older papers.